[英]How to solve a memory leak
下面的代码显示了进行概要分析时的内存泄漏。
ContentViewController *dataViewController;
dataViewController = [[ContentViewController alloc]initWithNibName:@"ContentViewController" bundle:nil];
dataViewController.DocumentPath = [self.modelArray objectAtIndex:index];
return dataViewController;
我该如何解决此泄漏,任何想法请帮助我。
如果您不使用ARC。
每当您从方法返回对象时,都将返回一个自动释放的对象:
return [dataViewController autorelease];
我建议使用ARC是一个不错的选择。 因为它比手动内存管理好得多。 ARC是一种编译时功能,它将在您编译源代码时自动为您添加保留,释放调用。
我认为可以肯定发问者使用的是手动内存管理而不是ARC,因为我不认为该代码会在ARC下泄漏。
话虽如此,Midhun MP的答案是正确的。 返回的对象需要自动释放以解决紧迫的问题。 但是我想添加一些信息,说明为什么剖析工具将此视为泄漏。
Objective-C在方法上使用命名约定来确定其内存管理语义。 例如,将期望一个名为newPerson
的方法返回一个对象的拥有引用(该对象是保留计数为+1的对象)。 期望一个名为person
的方法返回一个自动释放的对象(即没有所有者引用的对象)。
在第一种情况下,方法的调用者拥有该对象,并期望在完成后将其释放。 第二种情况说明,调用方不必担心释放对象(因为它不是所有者)。
我喜欢用来记住约定的一种简单方法就是我从CARN规则中学到的知识。
在Cbjective-C中,任何包含这些单词的方法都应将拥有的引用返回给它们返回的对象。
因此,总而言之,如果您打算从方法中返回一个拥有的对象,请修改其名称以包括上述单词之一,否则,请自动释放您返回的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.