[英]How do I access instance variables inside an instance method called from an instance method at the same level
[英]Why I should access the instance variable directly from within an initialization method?
使用Objective-C文檔的Apple Programming聲明:
您應該始終直接從初始化方法中訪問實例變量,因為在設置屬性時,對象的其余部分可能尚未完全初始化。 即使您不提供自定義訪問器方法或從您自己的類中知道任何副作用,未來的子類也可以很好地覆蓋該行為。
但是我不知道setter方法會有什么副作用,請舉個例子來解釋為什么我必須直接從初始化方法中訪問實例變量
答案很簡單 - 它是代碼味道。 像self.foobar = something
點符號self.foobar = something
Objective-C中的self.foobar = something
只是用於消息傳遞的語法糖。 向self
發送消息通常很好。 但是有兩種情況需要避免它們:
1.創建對象時,和
2.當物體被摧毀時。
在這兩次,對象處於一種奇怪的中間狀態。 它缺乏誠信。 在這些時間調用方法是代碼味道,因為每個方法都應該在對象上操作時保持不變量。
如果子類重寫了setter方法,則無法保證實例變量將包含正確的數據。 如果要在初始化等關鍵階段維護對象內的數據完整性,則應按Apple建議進行操作。
除了@JacobRelkin點之外,副作用還包括鍵值觀察。 即使在-init*
和-dealloc
期間,其他對象也可以觀察到更改。 我以前有一個KVO -dealloc
錯誤。
確實是直接設置和拆除ivars的最佳實踐。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.