如何解决内存泄漏问题

时间:2013-01-14 09:20:02

标签: iphone ios objective-c ipad memory-leaks

下面的代码在分析时显示内存泄漏。

ContentViewController *dataViewController;
dataViewController = [[ContentViewController alloc]initWithNibName:@"ContentViewController" bundle:nil];

dataViewController.DocumentPath = [self.modelArray objectAtIndex:index];
return dataViewController;

我如何解决这个漏洞,任何想法请帮助我。

2 个答案:

答案 0 :(得分:4)

如果您不使用ARC。

每当从方法返回一个对象时,返回一个自动释放的对象:

return [dataViewController autorelease];

我建议使用ARC是个不错的选择。因为它比手动内存管理要好得多。 ARC是一个编译时功能,它会在您编译源代码时自动为您添加保留,释放调用。

答案 1 :(得分:1)

我认为假设提问者使用手动内存管理而不是ARC是安全的,因为我不相信这个代码会在ARC下泄漏。

话虽如此,Midhun MP的回答是正确的。返回的对象需要自动释放才能解决当前问题。但是我想添加一些关于为什么这被分析工具视为泄漏的信息。

Objective-C使用方法的命名约定来确定它们的内存管理语义。例如,一个名为newPerson的方法应该返回对象的拥有引用(即保留计数为+1的对象)。一个名为person的方法应该返回一个自动释放的对象,(这是一个没有拥有引用的对象)。

在第一种情况下,方法的调用者拥有该对象,并且在完成时应该释放它。第二种情况说明调用者不必担心释放对象(因为它不是拥有的)。

我喜欢用来记住约定的简单方法是我学习的CARN规则。

  • C opy
  • A lloc
  • R etain
  • N ew

在Cbjective-C中,任何包含这些单词的方法都应该返回对其返回对象的拥有引用。

总而言之,如果您打算从方法中返回一个拥有的对象,请修改其名称以包含上述单词之一,如果不是,则自动释放您返回的对象。