2009-07-31 251 views
2
SomeObject *temp = [[SomeObject alloc] init] 
self.theObject = temp; 
[temp release]; 

爲什麼總是這樣做?爲什麼不這是什麼意思-c

self.theObject = [[SomeObject alloc] init]; 

回答

11

如果theObject屬性是一個保留屬性,第一種方法是正確的,因爲它不泄漏內存。它也比正確的方法更有效寫的第二個版本,它是這樣的:當你創建一個對象與alloc

self.theObject = [[[SomeObject alloc] init] autorelease]; 

你負責無論是releaseautorelease莫名其妙地釋放它的是。

+4

從技術上講,它是創建對象的alloc,因此需要釋放,而不是init。 – smorgan 2009-07-31 04:51:05

+0

謝謝,很好。 – 2009-07-31 04:52:11

+0

是的,我也注意到了。不過謝謝。我真的開始欣賞現在其他語言的垃圾收集。 – mk12 2009-07-31 04:57:21

1

第二個版本漏SomeObject實例,因爲self.theObject會調用setter,如果正確編寫,保留了對象。

你可以只是做

theObject = [[SomeObject alloc] init]; 

,有些人肯定做。儘管如此,其他人更喜歡總是使用訪問器,要麼是爲了一致性,要麼是爲了避免錯誤,如果訪問器有副作用(例如,你會繞過KVO通知,如果它不是init方法的一部分,這可能是一個問題)。