Chr*_*s S 0 pointers memory-management objective-c nsstring
来自.NET背景我用来重用字符串变量进行存储,下面的代码是否可能导致内存泄漏?该代码针对iphone/itouch,因此没有自动GC.
-(NSString*) stringExample
{
NSString *result = @"example";
result = [result stringByAppendingString:@" test"]; // where does "example" go?
return result;
}
Run Code Online (Sandbox Code Playgroud)
令我困惑的是NSStrings是不可变的,但你可以重复使用'immutable'变量没有问题.
Jas*_*oco 13
它肯定会导致内存泄漏.您必须小心重用,因为您必须了解很多关于底层NSString对象的实际实现,以确定您是否"安全".因此,如果您不使用垃圾收集,为了安全起见,您不应该按照您的方式重用变量.
例如,这是完全安全的:
NSString *result = @"example";
result = [result stringByAppendingString:@" test"];
Run Code Online (Sandbox Code Playgroud)
因为初始字符串实际上是一个objective-c字符串常量.但是,这会导致内存泄漏:
NSString *result = [[NSString alloc] initWithUTF8String:argv[0]];
result = [result stringByAppendingString:@" something more"];
Run Code Online (Sandbox Code Playgroud)
然而,这是安全的,因为你从来没有在第一时间拥有结果:
NSString *result = [NSString stringWithUTF8String:argv[0]];
result = [result stringByAppendingString:@" something more"];
Run Code Online (Sandbox Code Playgroud)
所以基本上,如果您不拥有该对象或者您已启用垃圾收集,则它是安全的.但是,如果您拥有原始对象并执行此操作,则会泄漏内存.
| 归档时间: |
|
| 查看次数: |
4383 次 |
| 最近记录: |