1

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

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

这是一个屏幕截图,指示仪器中的内存泄漏。 在此处输入图像描述

我怎样才能摆脱这种内存泄漏?

4

2 回答 2

7

该方法中包含单词“new”,因此根据Objective-C 约定,它应该返回对对象的拥有引用,即。保留计数为 1 的对象。自动释放对象返回保留计数为 0 的对象。

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

于 2012-06-09T10:44:24.237 回答
1

除了 Jasarien 的答案之外,您应该将您的方法命名为:

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

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

于 2012-06-09T18:52:00.237 回答