下面的代码在分析时显示内存泄漏。
ContentViewController *dataViewController;
dataViewController = [[ContentViewController alloc]initWithNibName:@"ContentViewController" bundle:nil];
dataViewController.DocumentPath = [self.modelArray objectAtIndex:index];
return dataViewController;
我如何解决这个漏洞,任何想法请帮助我。
答案 0 :(得分:4)
如果您不使用ARC。
每当从方法返回一个对象时,返回一个自动释放的对象:
return [dataViewController autorelease];
我建议使用ARC是个不错的选择。因为它比手动内存管理要好得多。 ARC是一个编译时功能,它会在您编译源代码时自动为您添加保留,释放调用。
答案 1 :(得分:1)
我认为假设提问者使用手动内存管理而不是ARC是安全的,因为我不相信这个代码会在ARC下泄漏。
话虽如此,Midhun MP的回答是正确的。返回的对象需要自动释放才能解决当前问题。但是我想添加一些关于为什么这被分析工具视为泄漏的信息。
Objective-C使用方法的命名约定来确定它们的内存管理语义。例如,一个名为newPerson
的方法应该返回对象的拥有引用(即保留计数为+1的对象)。一个名为person
的方法应该返回一个自动释放的对象,(这是一个没有拥有引用的对象)。
在第一种情况下,方法的调用者拥有该对象,并且在完成时应该释放它。第二种情况说明调用者不必担心释放对象(因为它不是拥有的)。
我喜欢用来记住约定的简单方法是我学习的CARN规则。
在Cbjective-C中,任何包含这些单词的方法都应该返回对其返回对象的拥有引用。
总而言之,如果您打算从方法中返回一个拥有的对象,请修改其名称以包含上述单词之一,如果不是,则自动释放您返回的对象。