這個約定有一些目的嗎?爲什麼Cocoa-Touch class ivars具有領先的下劃線字符?
回答
蘋果喜歡使用下劃線表示「私人」,根據Coding Guidelines for Cocoa:
避免使用下劃線作爲前綴意味着私人,尤其是在方法。 Apple保留使用此慣例。第三方使用可能導致名稱空間衝突;他們可能無意中用自己的方法凌駕現有的私人方法,造成災難性的後果。
用下劃線開頭的方法名是根據The Objective-C Programming Language保留(這意味着他們保留的,即使你不使用可可,大概):
以「_」開頭方法名,一單個下劃線字符,保留供Apple使用。
此外,C/C++約定是(通常)爲實現保留前導下劃線。很多人誤解了這一點,並且把_用於「私人」的任何事情;導致我們的代碼庫中大量的_FooLog()調用氾濫,即使它調用未定義的行爲。
做到這一點的唯一原因是阻止直接在你自己的班級中接觸伊娃。使用@private
阻止來自其他類的ivar訪問。
有一些開發商誰使用通過下面的方法「藏」有高德的以下約定:
@interface
@private
NSString *_myString
@property (nonatomic, retain) NSString *myString;
@implementation
@synthesize myString = _myString.
這樣做是不允許的伊娃直接訪問與強制通過屬性的myString所有訪問。它是隱藏你的課堂內部並遵守面向對象的封裝原則的一種方式。
Disallow是一個強大的詞,它使得它在視覺上顯而易見的是你正在訪問iVar,而不是訪問者。沒有什麼會阻止用戶訪問'_myString'。 – 2010-08-23 00:51:11
@Marcus ...除了@private指定! – ennuikiller 2010-08-23 00:57:47
從課堂上,還是從其他課上?班級應該知道它的內部;其他類不能訪問@私人ivars。 – 2010-08-23 00:58:33
- 1. 爲什麼許多網站都使用領先的下劃線來命名cookie?
- 2. Bash具有顏色,粗體和下劃線字符。爲什麼不是斜體?
- 3. 爲什麼不能添加黑線下劃線字符?
- 4. 爲什麼是下劃線
- 5. 爲什麼在TextView中有下劃線?
- 6. 爲什麼帶有下劃線的名稱不符合CLS?
- 7. 用下劃線命名ivars,具體含義
- 8. 爲什麼Fortran輸出具有領先的空間?
- 9. 爲什麼「_」(下劃線)匹配「 - 」(連字符)?
- 10. 標記私人會員的領先下劃線
- 11. 「雙下劃線」和「下劃線x」有什麼區別?
- 12. 爲什麼auto_increment拼寫爲「下劃線」?
- 13. 預先在字符串中加下劃線的大寫字母
- 14. 爲什麼下劃線PHP類功能
- 15. 使用下劃線字符
- 16. 爲什麼說 - 下劃線未定義
- 17. 導入__module__ python:爲什麼下劃線?
- 18. 爲什麼在PHP中雙下劃線(__)?
- 19. c/C++爲什麼有時會強調爲什麼有時沒有下劃線?
- 20. 意義和使用實例/類領先的雙下劃線(特殊行爲)
- 21. 在Scala中使用的下劃線字符是什麼?
- 22. Javascript中下劃線字符(_)的用法是什麼?
- 23. 爲什麼`float.is_integer`中的下劃線,而不是`str.isnumeric`中的下劃線?
- 24. 爲什麼expat拒絕en短劃線字符爲無效?
- 25. 爲什麼在Twilio Rest API中的「from」後面有下劃線?
- 26. 聲明的私有ivars與合成的ivars有什麼不同?
- 27. 領導下劃線錯誤與es6類
- 28. 爲什麼單個下劃線字符是lambda參數的非法名稱?
- 29. ivars在前綴有一個或兩個下劃線的XCode模板中
- 30. 領先的`\ x`在Python字符串中是什麼意思`\ xaa`
感謝大家的回答和討論。很有幫助。 – StoneBreaker 2010-08-23 17:54:28