我對理解這種情況有些困難。iPhone內存管理的模糊場景
- 我創建了一個對象
- 我所保留的屬性設置爲東西
- 我忘記釋放其財產
- 我釋放對象
,因爲我沒有鬆開財產在dealloc方法中,場景會導致內存泄漏還是會自動釋放該屬性?
我對理解這種情況有些困難。iPhone內存管理的模糊場景
,因爲我沒有鬆開財產在dealloc方法中,場景會導致內存泄漏還是會自動釋放該屬性?
是的,它是泄漏。
保留,alloc將增加一個計數器。 釋放將減少計數器。 當計數器達到零時,它將釋放內存。
思考設定器中,這樣:
[newvalue retain];
[property release];
property = newvalue;
所以..
您將不得不再次釋放該對象。 而且,相信我autorelease
在iphone環境下工作不太好。
可可的工作方式是內存管理總是在本地看起來平衡,在任何一個方法*。這是一個重點。通過查看這種方法,您應該能夠判斷出方法中是否存在泄漏或錯誤。沒有全球程序知識要求。
如果您從-copy,-alloc,-retain或-new方法接收到對象,則您有責任釋放對象。
如果你這樣做:
[obj setProp:foo];
是你的責任,以釋放富?否 - 查看規則。如果obj保留它(並且你說你碰巧知道它的確如此),那麼obj有責任在它的dealloc方法中釋放它,如果不是更早的話。
所以,如果你這樣做,它是平衡的,不管是什麼樣的財產-prop
是。
id obj = [[MyObject alloc] init];
[obj setProp:foo];
[obj release];
*除了在init,copy,dealloc和accessor方法的實現中。
這是不正確的,autorelease的確在iPhone上工作。 – Ken 2010-04-07 09:08:10
少量的自動釋放對象可以。但是,我仍然建議你應該避免使用它。 你可以在dealloc func 中釋放屬性,因爲'[nil release]'不會給你帶來任何麻煩。 – Bird 2010-04-07 09:38:13