我的应用程序充斥着有关NSString对象的内存泄漏。从来没有,我使用alloc创建一个NSString对象,但根据Instruments(与真实设备一起使用),该应用程序泄漏了NSString对象。 这发生在stringByAppendingString的使用周围。代码示例:
NSString *documentsPathPlusSlash = [self.documentsPath stringByAppendingString:@"/"];
NSString *documentsPathPlusSlashAndFileName = [documentsPathPlusSlash stringByAppendingString:fileName];
mainMenuViewController.documentsPath = documentsPathPlusSlashAndFileName;
一旦这是一个很长的陈述,所以我认为将它分成单独的行可以解决它。没有这样的运气,上面的代码泄漏了NSString对象。这是为什么? MainMenuViewController.dealloc不会释放documentsPath,因为这不是必需的。或者是吗? Apple文档和各种论坛并没有真正帮助。
答案 0 :(得分:2)
为什么? MainMenuViewController.dealloc不会释放documentsPath,因为这不是必需的。或者是吗?
这取决于documentsPath
中mainMenuViewController
属性的定义方式。如果使用retain
或copy
属性定义(可能是这样),那么您的控制器通过递增保留计数来“取得”字符串对象的所有权,并且它有责任将其释放dealloc
方法 - 因此在这种情况下你需要释放。
答案 1 :(得分:0)
取决于如何声明和实现documentsPath。在最简单的情况下,当documentsPath是带有@synthesized setter的@property(retain)时,你仍然需要在你的dealloc中将它设置为nil:
mainMenuViewController.documentsPath = nil