2011-01-05 52 views
5

我開始乒乒乓乓我的應用程序,並已得到了深刻的方式,它是運行很好,但我覺得我讓一些東西運行有點野。發佈一切你有@property保留@synthesize爲?

對於每一個@財產(非原子,保留),其然後創建一個@synthesize因爲我必須dealloc方法[可變釋放] - 這是正確的?

即使它是一個IBOutlet?

+0

+1表示清晰度良好。 – gabaum10 2011-01-05 20:31:48

+0

@Joe(或'copy') – 2011-01-06 00:40:22

+0

謝謝你們,我認爲它終於讓它穿過我厚厚的頭骨 – Slee 2011-01-07 13:14:11

回答

11

是。您通過使其成爲retain屬性來聲明對象的所有權,這意味着您必須通過釋放它來放棄所有權。

+2

另請參閱:http://stackoverflow.com/questions/2189919/how-is-release-handled-for-synthesized -retain的屬性 – 2011-01-05 17:51:34

+0

感謝,我的第一個程序,我只是如此如此偏離軌道 - 有一噸的屬性釋放:)你可能想看看Accessorizer – Slee 2011-01-05 17:54:23

+0

...它會讓你的生活更輕鬆。 http://www.kevincallahan.org/software/accessorizer.html – joshpaul 2011-01-05 18:17:40

1

是。如果您保留您負責釋放它的財產。

聲明的屬性從根本上取代了存取方法聲明;當你合成一個屬性時,編譯器只創建任何缺少訪問器方法。沒有與dealloc方法直接交互 - 屬性不會自動爲您釋放。

Declared Properties

通常你會在你的dealloc方法做到這一點。

- (void)dealloc { 
    [property release]; 
    [super dealloc]; 
} 
4

此外,如果你有一個保留IBOutlet,你應該釋放它,它在-viewDidUnload設置爲nil。當視圖被移除時,這可以讓對象釋放它的插座,特別是對低內存警告的響應。通過在該方法中將伊娃爾設置爲nil,如果隨後釋放對象,則避免了雙重釋放伊娃的風險。

相關問題