SomeObject *temp = [[SomeObject alloc] init]
self.theObject = temp;
[temp release];
爲什麼總是這樣做?爲什麼不這是什麼意思-c
self.theObject = [[SomeObject alloc] init];
SomeObject *temp = [[SomeObject alloc] init]
self.theObject = temp;
[temp release];
爲什麼總是這樣做?爲什麼不這是什麼意思-c
self.theObject = [[SomeObject alloc] init];
如果theObject
屬性是一個保留屬性,第一種方法是正確的,因爲它不泄漏內存。它也比正確的方法更有效寫的第二個版本,它是這樣的:當你創建一個對象與alloc
self.theObject = [[[SomeObject alloc] init] autorelease];
你負責無論是release
或autorelease
莫名其妙地釋放它的是。
第二個版本漏SomeObject實例,因爲self.theObject會調用setter,如果正確編寫,保留了對象。
你可以只是做
theObject = [[SomeObject alloc] init];
,有些人肯定做。儘管如此,其他人更喜歡總是使用訪問器,要麼是爲了一致性,要麼是爲了避免錯誤,如果訪問器有副作用(例如,你會繞過KVO通知,如果它不是init方法的一部分,這可能是一個問題)。
從技術上講,它是創建對象的alloc,因此需要釋放,而不是init。 – smorgan 2009-07-31 04:51:05
謝謝,很好。 – 2009-07-31 04:52:11
是的,我也注意到了。不過謝謝。我真的開始欣賞現在其他語言的垃圾收集。 – mk12 2009-07-31 04:57:21