Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何解决内存泄漏问题_Iphone_Ios_Objective C_Ipad_Memory Leaks - Fatal编程技术网

Iphone 如何解决内存泄漏问题

Iphone 如何解决内存泄漏问题,iphone,ios,objective-c,ipad,memory-leaks,Iphone,Ios,Objective C,Ipad,Memory Leaks,下面的代码在分析时显示内存泄漏 ContentViewController *dataViewController; dataViewController = [[ContentViewController alloc]initWithNibName:@"ContentViewController" bundle:nil]; dataViewController.DocumentPath = [self.modelArray objectAtIndex:index]; return dataV

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

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

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

如何解决此漏洞,有什么想法请帮助我。

如果您不使用ARC。

无论何时从方法返回对象,都会返回自动释放的对象:

return [dataViewController autorelease];

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

如果您不使用ARC。

无论何时从方法返回对象,都会返回自动释放的对象:

return [dataViewController autorelease];

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

我觉得可以安全地假设提问者使用的是手动内存管理,而不是ARC,因为我不相信此代码会在ARC下泄漏

话虽如此,弥敦议员的回答是正确的。返回的对象需要自动释放以解决眼前的问题。但我想补充一些信息,说明为什么分析工具认为这是一个漏洞

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

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

我喜欢用一种简单的方法来记住这个惯例,那就是我学到的CARN规则

  • Copy
  • Alloc
  • Retain
  • New
在cbobjective-C中,任何包含这些词的方法都应该返回对其返回对象的所属引用


总之,如果你打算从你的方法中返回一个拥有的对象,请修改它的名称以包含上面的一个词,否则,自动释放你返回的对象。

我觉得可以安全地假设提问者使用的是手动内存管理,而不是ARC,因为我不相信这段代码会在ARC下泄漏

话虽如此,弥敦议员的回答是正确的。返回的对象需要自动释放以解决眼前的问题。但我想补充一些信息,说明为什么分析工具认为这是一个漏洞

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

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

我喜欢用一种简单的方法来记住这个惯例,那就是我学到的CARN规则

  • Copy
  • Alloc
  • Retain
  • New
在cbobjective-C中,任何包含这些词的方法都应该返回对其返回对象的所属引用


因此,总之,如果您打算从方法中返回一个拥有的对象,请修改其名称以包含上面的一个词,否则,请自动释放返回的对象。

使用ARC(自动引用计数),您应该提供更多代码;具体来说:如何处理返回值?当有人询问如何解决内存泄漏时,告诉他们只使用ARC就像告诉游泳池中有泄漏的人只使用另一个没有泄漏的游泳池。你没有告诉他们如何解决他们遇到的问题。你在告诉他们要花时间、资源和精力去做一个没有教育他们的改变。@AnoopVaidya不同意。。只要您了解手动内存管理概念,不使用ARC没有什么错。而对于那些努力学习/应用手动内存管理概念并在此基础上编写出色应用程序的老派开发人员来说,ARC并没有提供任何新的或有吸引力的东西。@AnoopVaidya,这是完全不相关的。无论你驾驶的是莱特兄弟的飞机还是协和式飞机,了解飞机的工作原理都非常重要。仅仅因为协和式飞机为你实现了自动化并不意味着你不应该知道让飞机保持在空中的物理概念。了解如何使用Obj-C的内存管理非常有用,即使在使用ARC时也会对您有所帮助。有些代码区域不能使用ARC,或者可能需要特殊的桥接注意事项,了解手动内存管理在这些情况下是非常有用的;具体来说:如何处理返回值?当有人询问如何解决内存泄漏时,告诉他们只使用ARC就像告诉游泳池中有泄漏的人只使用另一个没有泄漏的游泳池。你没有告诉他们如何解决他们遇到的问题。你在告诉他们要花时间、资源和精力去做一个没有教育他们的改变。@AnoopVaidya不同意。。只要您了解手动内存管理概念,不使用ARC没有什么错。对于老派开发人员来说,他们在学习/应用man方面做了艰苦的工作