2011-08-29 84 views
3

XCode提示[NSString initWithFormat]方法(如“工具”窗口中列出的)是内存泄漏的来源。它列出了特定的方法,因此在该方法中,我确定了唯一的代码行initWithFormat(与仪器中标识的某些泄漏不同,由于某些原因,此代码不会带我到确切的代码行):NSString initWithFormat内存泄漏跳线

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之间 - 而且,即使我改变initWithFormatstringWithFormat,Xcode中给了我同样的内存泄漏,而是识别stringWithFormat,所以这显然是使物体问题。

+2

你发布的这段代码看起来不错,必须有一些中间代码导致这个问题。您可能想要扩展您的代码示例,以显示您在使用'name'变量时在分配和释放之间做了什么。 – Perception

+0

谢谢,我已经更新了我的问题。 – johnbakers

+0

也许它确实会把你带到确切的犯规代码行,但你不认识它?请显示确切的违规行。 –

回答

4

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

+0

啊,谢谢! 'dealloc'是这里缺少的链接。我只是忘了在那里添加它。干杯。 – johnbakers