【发布时间】:2012-06-13 04:29:04
【问题描述】:
我有这个方法会泄漏 ~ 6KB :
+ (EInspectorFacilityInfo*) newWithNode: (CXMLNode*) node
{
if(node == nil) { return nil; }
return (EInspectorFacilityInfo*)[[[EInspectorFacilityInfo alloc] initWithNode: node] autorelease];
}
这是一个屏幕截图,表明仪器中的内存泄漏。
我怎样才能摆脱这种内存泄漏?
【问题讨论】:
-
重命名你的方法。按照惯例,以
new开头的方法会返回未自动释放的对象。也许这就是原因。 -
请告诉我们你是如何调用这个方法的。
-
EInspectorFacilityInfo类呢?如果您不释放它管理的对象,可能泄漏可能在其中。你不需要投射。 -
嗯,除了命名约定之外,只有这种方法没有问题。您可能在其他地方泄漏。这就是为什么重要的是你要更多地关注你是如何调用这个方法的,你对返回的对象做了什么。除非您向我们展示这些代码,否则我们无法知道您泄漏的原因。
-
taskinoor 是正确的。 Instruments 向您展示了一个已泄漏的对象被分配到哪里,但这并不意味着它就是在哪里泄漏的。仪器无法确定。在泄漏列表中,您可以找到特定的泄漏对象,Instruments 可以向您显示其保留和释放的整个历史记录。您必须仔细查看这些代码,看看哪些代码未能平衡其保留与发布。此外,进行构建和分析并修复所有已识别的问题。
标签: iphone objective-c ios memory-leaks xcode-instruments