2011-04-12 42 views
1

當我實現dealloc方法我以前寫:是否正確寫[self.someproperty發行]

[preopertyX release]; 

今天,我發現這個代碼:

[self.propertyX release]; 

我不知道這種方法是完全正確的。你有什麼想法 ? (我們可以假設propertyX是一個保留和綜合的屬性)。

回答

1

你可以寫[self.propertyX版本]如果您已設置propertyX保留,否則合成不

+0

在您看來它表現得像是否我寫[propertyX發佈]? – MatterGoal 2011-04-12 12:07:56

+0

如果屬性爲(複製),則還必須釋放。我會避免使用self.propertyX,因爲有一個機會(一個渺茫的機會,但仍然...),一個子類可能實現一個getter方法,其副作用在-dealloc中是不合適的。 – 2011-04-12 12:40:26

+1

@Sherm Pendley:同樣'self.property = nil;'會觸發對象上的KVO被釋放。 – JeremyP 2011-04-12 13:34:07

2

從我的理解,您應該將其設置爲無,或者你可以釋放實例變量。

[self setPropertyX:nil] 

[propertyX release] 

你列出可以產生有害的副作用,但如果你希望你的二傳手的側動作的情況發生,我建議設置爲零的方法。

接受的答案在這裏:iPhone - dealloc - Release vs. nil是相當不錯的。

這是一個很好的辯論,概括地說,非常振奮地提供給您的方法。

http://iphonedevelopment.blogspot.com/2010/09/dealloc.html 跟進 http://www.red-sweater.com/blog/1423/dont-coddle-your-code

+0

我想你是在談論分配零。 (使用'=')設置爲零應該非常像釋放,但無論你在設置器中設置的任何副作用 – griotspeak 2011-04-12 12:14:57

+0

明白你的意思。出於我的想法:-)。 – taskinoor 2011-04-12 12:19:43

+0

也許我錯了,但是,如果屬性合成,設置爲nil類似於發佈,因爲自動合成屬性的第一步是: ** [property release]; property = new_value(this case = nil); ** – MatterGoal 2011-04-12 12:39:12