我在这条线路上用仪器发现内存泄漏:
NSString * finalString;
finalString = [NSString stringWithFormat:@"%@",chunksString];
chunksString被声明为类字段NSString。
在其他方法中初始化为:
chunksString = [NSString stringWithString:@""];
在其他方法中取值:
chunksString = [NSString stringWithFormat:@"%@%@",chunksString,string];
仪器告知在填充finalString的行中泄漏100%。
据我所知,chunksString永远不会使用alloc,copy或init初始化,与finalString相同。两者都不是保留属性,为什么我有这个泄漏?
感谢。
答案 0 :(得分:1)
泄漏初始内存分配位于以下行:
finalString = [NSString stringWithFormat:@"%@",chunksString];
泄漏是因为在finalString
的生命中,有一个保留与释放不平衡。您需要查看finalString
的完整生命周期。
如果您需要查看对象使用仪器的保留,释放和自动释放的位置:
在仪器中运行,在分配中设置“记录参考计数”(您必须停止记录以设置选项)。导致问题代码运行,停止记录,搜索感兴趣的ivar,向下钻取,您将能够看到所有保留,释放和自动释放发生的位置。
更好的是,如果可能的话,使用ARC,如果遗留的代码无法移植到ARC,可以关闭单个文件。