如何修复自动释放对象的内存泄漏

时间:2012-06-09 10:33:49

标签: iphone objective-c ios memory-leaks xcode-instruments

我有这个泄漏〜6KB的方法:

+ (EInspectorFacilityInfo*) newWithNode: (CXMLNode*) node
{
  if(node == nil) { return nil; }
  return (EInspectorFacilityInfo*)[[[EInspectorFacilityInfo alloc] initWithNode: node] autorelease];
}

这是一个屏幕截图,指示仪器中的内存泄漏。 enter image description here

如何摆脱这种内存泄漏?

2 个答案:

答案 0 :(得分:7)

该方法中包含“new”一词,因此Objective-C conventions期望它返回对象的拥有引用,即。保留计数为1的对象。自动释放对象将返回保留计数为0的对象。

您必须从方法名称中删除单词new,或者不自动释放该对象 - 在这种情况下,调用者将负责释放它。

答案 1 :(得分:1)

对Jasarien回答的小补充,您应该将您的方法命名为:

+ (EInspectorFacilityInfo*) inspectorFacilityInfoWithNode: (CXMLNode*) node

这将解决您的问题并匹配Cocoa编码风格和精神。