簡體   English   中英

iPhone內存管理的模棱兩可方案

[英]Ambiguous scenario for iPhone memory management

我很難理解這種情況。

  • 我創建一個對象
  • 我將其保留的屬性設置為某種
  • 我忘了釋放它的財產
  • 我釋放對象

由於我沒有在dealloc方法中釋放該屬性,因此該方案是否會導致內存泄漏或該屬性會自動釋放?

Cocoa的工作方式是,在任何一種方法*中,內存管理始終看起來局部平衡。 這是重點。 您僅通過查看一個方法就能知道該方法是否泄漏或錯誤。 不需要全局程序知識。

如果您從-copy,-alloc,-retain或-new方法收到對象,則有責任釋放該對象。

如果您這樣做:

[obj setProp:foo];

釋放foo是您的責任嗎? 否-請參閱規則。 如果obj保留了它(您是說您碰巧知道它確實存在),那么obj的責任是釋放它,如果不早的話,可以在其dealloc方法中釋放它。

因此,如果您執行此操作,則-prop是哪種屬性,它都是平衡的。

id obj = [[MyObject alloc] init];
[obj setProp:foo];
[obj release];

*除了init,copy,dealloc和accessor方法的實現內。

是的,這是泄漏。

保留,分配將使計數器增加一。 釋放將減少計數器。 當計數器達到零時,它將釋放內存。

認為二傳手是這樣的:

[newvalue retain];
[property release]; 
property = newvalue;

所以..

  • 創建一個對象=> 0 + 1 = 1
  • 將其分配給某個對象作為保留屬性=> 1 + 1 = 2
  • 釋放對象=> 2-1 = 1

您將不得不再次釋放該對象。 而且,請相信我, autorelease在iPhone環境中無法很好地工作。

暫無
暫無

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

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