创建的NSStrings没有alloc,内存泄漏

时间:2010-05-25 13:41:55

标签: iphone memory nsstring memory-leaks

我的应用程序充斥着有关NSString对象的内存泄漏。从来没有,我使用alloc创建一个NSString对象,但根据Instruments(与真实设备一起使用),该应用程序泄漏了NSString对象。 这发生在stringByAppendingString的使用周围。代码示例:

NSString *documentsPathPlusSlash = [self.documentsPath stringByAppendingString:@"/"];
NSString *documentsPathPlusSlashAndFileName = [documentsPathPlusSlash stringByAppendingString:fileName];
mainMenuViewController.documentsPath = documentsPathPlusSlashAndFileName;

一旦这是一个很长的陈述,所以我认为将它分成单独的行可以解决它。没有这样的运气,上面的代码泄漏了NSString对象。这是为什么? MainMenuViewController.dealloc不会释放documentsPath,因为这不是必需的。或者是吗? Apple文档和各种论坛并没有真正帮助。

2 个答案:

答案 0 :(得分:2)

  

为什么? MainMenuViewController.dealloc不会释放documentsPath,因为这不是必需的。或者是吗?

这取决于documentsPathmainMenuViewController属性的定义方式。如果使用retaincopy属性定义(可能是这样),那么您的控制器通过递增保留计数来“取得”字符串对象的所有权,并且它有责任将其释放dealloc方法 - 因此在这种情况下你需要释放。

答案 1 :(得分:0)

取决于如何声明和实现documentsPath。在最简单的情况下,当documentsPath是带有@synthesized setter的@property(retain)时,你仍然需要在你的dealloc中将它设置为nil:

mainMenuViewController.documentsPath = nil