XCode建议[NSString initWithFormat]
方法(在“工具”窗口中列出)是内存泄漏的来源。它列出了特定的方法,因此在该方法中我使用initWithFormat
确定了唯一的代码行(与在Instruments中识别的一些泄漏不同,由于某种原因,这个不会将我带到完全令人讨厌的代码行):
NSString * name=[[NSString alloc] initWithFormat:@"%@",[[lineArray objectAtIndex:0] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] ];
CustomObject * newData=[[CustomObject alloc] init];
newData.info=name; // info is a retained NSString ivar of CustomObject
[name release];
[self.ivar setObject:newData forKey:@"key"];
[newData release];
initWithFormat
和release
属于同一范围:都发生在if
语句中。
是否有一些NSString方法以某种方式调用initWithFormat
而不在代码中显而易见?比如这些stringByTrimmingcharactersInSet
类型的方法?
更新:我已在initWithFormat
和release
之间添加了所有代码 - 此外,即使我将initWithFormat
更改为stringWithFormat
,Xcode也会向我提供相同的内存泄漏,而不是识别stringWithFormat
,所以这显然是导致问题的对象。
答案 0 :(得分:4)
仪器没有显示物体泄漏的位置;它显示泄漏的对象创建的位置。所以可能发生的事情是你没有在info
方法中发布CustomObject
类的dealloc
ivar。不管怎样,或者你在其他地方过度保留了那个对象。