簡體   English   中英

如何解決內存泄漏

[英]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規則中學到的知識。

  • çOPY
  • 一個 LLOC
  • [R Etain的
  • ñEW

在Cbjective-C中,任何包含這些單詞的方法都應將擁有的引用返回給它們返回的對象。

因此,總而言之,如果您打算從方法中返回一個擁有的對象,請修改其名稱以包括上述單詞之一,否則,請自動釋放您返回的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM