【发布时间】:2011-08-29 15:47:09
【问题描述】:
XCode 暗示 [NSString initWithFormat] 方法(如 Instruments 窗口中所列)是内存泄漏的来源。它列出了特定的方法,因此在该方法中,我用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 也会给我同样的内存泄漏,而不是识别@987654333 @,所以这显然是导致问题的对象。
【问题讨论】:
-
您发布的这段代码看起来不错,一定有一些中间代码导致了问题。您可能希望扩展您的代码示例,以显示您在分配和释放之间使用
name变量所做的事情。 -
谢谢,我已经更新了我的问题。
-
也许它确实将您带到了确切的违规代码行,但您不认识它?请显示准确的违规行。
-
它根本没有带我去任何源代码。使用调用树,我可以追踪方法在哪里,我通过将其更改为 stringWithFormat 进一步确认了这一点,这导致调用树将泄漏更改为 stringWithFormat 方法
标签: objective-c xcode