Iphone 为什么这行会泄漏内存?

Iphone 为什么这行会泄漏内存?,iphone,objective-c,memory-management,Iphone,Objective C,Memory Management,其中row是一个NSMutableDictionary。是否有其他方法将此字符串注入我的字典?分析工具说,因为字符串是“自动删除的”,所以您可以通过 在它周围放一个自动释放池 alloc/init str,然后释放它 或者忽略优化消息 这是一种方式: [row setObject:[NSString stringWithCString:value encoding:NSUTF8StringEncoding] forKey:columnName]; 我以前遇到过这个问题,因为NSMutabl

其中row是一个NSMutableDictionary。是否有其他方法将此字符串注入我的字典?

分析工具说,因为字符串是“自动删除的”,所以您可以通过

  • 在它周围放一个自动释放池
  • alloc/init str,然后释放它
  • 或者忽略优化消息
这是一种方式:

[row setObject:[NSString stringWithCString:value encoding:NSUTF8StringEncoding] forKey:columnName];

我以前遇到过这个问题,因为
NSMutableDictionary
拥有这个对象,它在字典发布之前不会被发布


我建议您在代码中的某个地方释放一个对象,而不适当地释放它所拥有的变量,很可能是
NSMutableDictionary*行

谁告诉你内存泄漏的?我正在使用分析工具,它表明存在泄漏。你提供的代码不会以完全相同的保留计数结束吗?这取决于,代码中的自动释放字符串只有在到达自动释放池排水/释放,并到达满足警告条件的分析工具时才会释放。当您手动释放它时,释放时它是免费的,并且工具认为这是编码的标准方式,但是差别是如此微不足道,以至于它最终并不重要。您的代码编写、阅读速度更快,而且看起来更干净,因此我个人会保留您的代码。因此,如果我有一个包含多个对象的自定义类,是否最好释放该自定义类中的每个活动对象,然后释放父对象?在每个类中,您可以alloc/init/copy一个对象,该类应负责在解除锁定期间释放这些对象。我和你做的完全一样,探查器告诉我代码泄露了。我的问题是,我没有正确地释放父对象,因此它下面的所有内容都不会被释放。当然,除非您在SDK5.0中使用ARC(自动引用计数),否则您应该不会有任何问题。感谢此提示,我使用的是ios4,所以我必须通过并正确地从自定义类中释放内容
NSString *str = [[NSString alloc] initWithCString:value encoding:NSUTF8StringEncoding];
[row setObject:str forKey:columnName];
[str release];