【发布时间】:2012-02-20 09:46:13
【问题描述】:
我在这一行遇到了仪器的内存泄漏:
NSString * finalString;
finalString = [NSString stringWithFormat:@"%@",chunksString];
chunksString 被声明为类字段 NSString。
在其他方法中初始化为:
chunksString = [NSString stringWithString:@""];
在其他方法中取值:
chunksString = [NSString stringWithFormat:@"%@%@",chunksString,string];
Instruments 在填充 finalString 的行中显示 100% 的泄漏。
据我了解,chunksString 从未使用 alloc、copy 或 init 初始化,与 finalString 相同。两者都不是带有保留的属性,为什么我会有这个泄漏?
谢谢。
【问题讨论】:
-
据我所知,是 finalString 泄漏了分配给它的新 NSString。你会在后面的代码中发布它吗?
-
@Joachim - 工厂方法如何创建泄漏? [NSString stringWithFormat:@"%@",chunksString];
-
当您说“chunkString 被声明为类字段 NSString”时,您到底是什么意思?是财产吗?在这种情况下,字符串应该用复制声明而不是保留,用 self.chunkString 和分配给 nil 的 dealloc 寻址。你这样做吗?
-
声明 NSString * finalString = nil 时赋值为 nil;
-
你在使用自动释放池吗? stringWithFormat 会在自动释放池中注册该字符串(如果存在),因此如果有,我无法仅从那行代码中看到警告的原因。
标签: objective-c ios nsstring instruments memory-leaks