我已經完成了Objective-C的方式,當時和最近(即剛剛)讀取Apple網站上關於使用retain
和release
的文檔。但是,在他們的Creating an iPhone Application頁一些代碼有我有點糊塗:關於蘋果參考庫中保留/釋放語義的基本問題
- (void)setUpPlacardView
{
// Create the placard view -- it calculates its own frame based on its image.
PlacardView *aPlacardView = [[PlacardView alloc] init];
self.placardView = aPlacardView;
[aPlacardView release]; // What effect does this have on self.placardView?!
placardView.center = self.center;
[self addSubview:placardView];
}
沒有看到整個班級,似乎self.placardView
也是PlacardView *
和它aPlacardView
分配不似乎表明它會保留對它的引用。因此,在我看來,我評論過的行([aPlacardView release];
)可能導致aPlacardView
的保留計數爲0,因此被解除分配。由於self.placardView
指向它,現在不會指向釋放內存並導致問題嗎?
屬性的概念並不邪惡,它是Apple引入的點符號時間。它污染了語法並導致無盡的混淆。就我個人而言,我使用很多屬性,但我使用普通的Objective-C語法來獲取和設置它們。 – JeremyP 2010-04-11 19:22:21
是的,我同意這一點。這就是爲什麼我在邪惡一詞前面加上括號。對我來說,點符號完全可以;我總是提醒自己,這些都是方法調用。但我衷心地認爲這對初學者來說是一個很大的混亂。 – Yuji 2010-04-11 22:27:41