为什么我得到这个内存泄漏

时间:2012-01-27 11:34:57

标签: objective-c ios nsstring instruments memory-leaks

我在这条线路上用仪器发现内存泄漏:

NSString * finalString;
finalString = [NSString stringWithFormat:@"%@",chunksString];

chunksString被声明为类字段NSString。

在其他方法中初始化为:

chunksString =  [NSString stringWithString:@""];

在其他方法中取值:

chunksString = [NSString stringWithFormat:@"%@%@",chunksString,string];

仪器告知在填充finalString的行中泄漏100%。

据我所知,chunksString永远不会使用alloc,copy或init初始化,与finalString相同。两者都不是保留属性,为什么我有这个泄漏?

感谢。

1 个答案:

答案 0 :(得分:1)

泄漏初始内存分配位于以下行:

finalString = [NSString stringWithFormat:@"%@",chunksString];

泄漏是因为在finalString的生命中,有一个保留与释放不平衡。您需要查看finalString的完整生命周期。

如果您需要查看对象使用仪器的保留,释放和自动释放的位置:

在仪器中运行,在分配中设置“记录参考计数”(您必须停止记录以设置选项)。导致问题代码运行,停止记录,搜索感兴趣的ivar,向下钻取,您将能够看到所有保留,释放和自动释放发生的位置。

enter image description here

更好的是,如果可能的话,使用ARC,如果遗留的代码无法移植到ARC,可以关闭单个文件。