無論何時我們創建屬性,自動生成getter-setter屬性,我都會在自我和下劃線之間混淆以訪問Objective c中的屬性。所以我們可以使用self.property和_property相同的屬性。在我看來,有些差別我沒有得到。請用實例告訴我。自我和下劃線訪問目標c中的屬性之間的區別?
5
A
回答
12
underbar(下劃線)版本是實際的實例變量,不應直接引用。您應該始終通過屬性名稱,這將確保任何getter/setter操作得到遵守。
所以,如果你做_property = 4
,你直接設置變量。如果您使用self.property = 4
,則您正在有效地調用方法調用[self setProperty:4]
,該方法將通過setter(可能會執行某些操作,例如強制屬性的最大值爲3,或更新UI以反映新值等)。
3
當您使用self.XX時,您通過setter或getter訪問屬性。
當您使用_XX時,您直接跳過setter或getter訪問屬性。
1
比方說,你有定義的屬性如下:
@property (nonatomic,strong) NSString* name;
name屬性的getter和setter將自動爲you.Now使用下劃線和自我之間產生的,所不同的是:
self.name [email protected]"someName"; // this uses a setter method generated for you.
_name = @"someName"; // this accesses the name property directly.
這同樣適用於獲取name屬性;
相關問題
- 1. MSBuild的目標屬性和目標標記之間的區別
- 2. 目標C下劃線屬性vs自我
- 3. 軌道中的表格和下劃線之間的區別
- 4. .net 3.5和4之間的屬性訪問區別
- 5. contentDocument和contentWindow之間的區別javascript iframe/frame訪問屬性
- 6. ECMAScript中訪問器屬性和數據屬性之間的區別?
- 7. Ant javac目標和源屬性之間的區別?
- 8. 下劃線_.each和_.map之間的區別是什麼?
- 9. 下劃線js之間的區別_each方法和_.invoke方法
- 10. 「集合」包和「_collections」之間的區別(帶下劃線)
- 11. objective-c中的屬性屬性之間的區別
- 12. SPQuery:Query和ViewXml屬性之間的區別?
- 13. lxml中的屬性和樣式標籤之間的區別
- 14. 通過「propertyname」訪問屬性與objective-c中的「self.propertyname」之間的區別?
- 15. C#winform:從其他形式訪問公共屬性和靜態和公共屬性之間的區別
- 16. eq之間的區別?和=在計劃?
- 17. 劃分和移位之間的區別
- 18. 用下劃線模板中的特殊字符訪問屬性?
- 19. C#3.0中自動屬性和公共字段之間的區別
- 20. 我瞭解Python中實例屬性和類屬性之間的區別嗎?
- 21. 字段和自動屬性之間的區別是什麼?
- 22. 屬性和全局變量之間的區別[objective-c]
- 23. Objective-C屬性 - 保留和分配之間的區別
- 24. 輸入屬性和可預測屬性之間的區別
- 25. 屬性指令和元素屬性語法之間的區別?
- 26. 水豚之間訪問'路線'和訪問'/路線'有任何區別嗎?
- 27. 「雙下劃線」和「下劃線x」有什麼區別?
- 28. 目標C @自定義類中的屬性訪問器?
- 29. C中的/ +和+之間的區別?
- 30. 屬性之間的區別File,Yaml&Json?
使用屬性獲取器/設置器還具有觸發鍵值觀察器(KVO)的巨大優勢。 – Cyrille
Cyrille - 謝謝。也許還有其他的優勢,我不知道,但我對Obj-C很缺乏經驗。 –
對於「對Obj-C沒有經驗」的人來說,這是相當準確的答案。恭喜。 – Cyrille