我開始乒乒乓乓我的應用程序,並已得到了深刻的方式,它是運行很好,但我覺得我讓一些東西運行有點野。發佈一切你有@property保留@synthesize爲?
對於每一個@財產(非原子,保留),其然後創建一個@synthesize因爲我必須dealloc方法[可變釋放] - 這是正確的?
即使它是一個IBOutlet?
我開始乒乒乓乓我的應用程序,並已得到了深刻的方式,它是運行很好,但我覺得我讓一些東西運行有點野。發佈一切你有@property保留@synthesize爲?
對於每一個@財產(非原子,保留),其然後創建一個@synthesize因爲我必須dealloc方法[可變釋放] - 這是正確的?
即使它是一個IBOutlet?
是。您通過使其成爲retain
屬性來聲明對象的所有權,這意味着您必須通過釋放它來放棄所有權。
另請參閱:http://stackoverflow.com/questions/2189919/how-is-release-handled-for-synthesized -retain的屬性 – 2011-01-05 17:51:34
感謝,我的第一個程序,我只是如此如此偏離軌道 - 有一噸的屬性釋放:)你可能想看看Accessorizer – Slee 2011-01-05 17:54:23
...它會讓你的生活更輕鬆。 http://www.kevincallahan.org/software/accessorizer.html – joshpaul 2011-01-05 18:17:40
是。如果您保留您負責釋放它的財產。
聲明的屬性從根本上取代了存取方法聲明;當你合成一個屬性時,編譯器只創建任何缺少訪問器方法。沒有與dealloc方法直接交互 - 屬性不會自動爲您釋放。
通常你會在你的dealloc方法做到這一點。
- (void)dealloc {
[property release];
[super dealloc];
}
此外,如果你有一個保留IBOutlet
,你應該釋放它,它在-viewDidUnload
設置爲nil
。當視圖被移除時,這可以讓對象釋放它的插座,特別是對低內存警告的響應。通過在該方法中將伊娃爾設置爲nil
,如果隨後釋放對象,則避免了雙重釋放伊娃的風險。
+1表示清晰度良好。 – gabaum10 2011-01-05 20:31:48
@Joe(或'copy') – 2011-01-06 00:40:22
謝謝你們,我認爲它終於讓它穿過我厚厚的頭骨 – Slee 2011-01-07 13:14:11