NSString initWithFormat内存泄漏问题

时间:2011-08-29 15:47:09

标签: objective-c xcode

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];

initWithFormatrelease属于同一范围:都发生在if语句中。

是否有一些NSString方法以某种方式调用initWithFormat而不在代码中显而易见?比如这些stringByTrimmingcharactersInSet类型的方法?

更新:我已在initWithFormatrelease之间添加了所有代码 - 此外,即使我将initWithFormat更改为stringWithFormat,Xcode也会向我提供相同的内存泄漏,而不是识别stringWithFormat,所以这显然是导致问题的对象。

1 个答案:

答案 0 :(得分:4)

仪器没有显示物体泄漏的位置;它显示泄漏的对象创建的位置。所以可能发生的事情是你没有在info方法中发布CustomObject类的dealloc ivar。不管怎样,或者你在其他地方过度保留了那个对象。