我注意到,在許多社區Objective-C類和Apple框架中,它們使用以帶下劃線的變量作爲前綴的約定來命名一些變量,例如:_name
。有下劃線的原因是什麼?我應該在我自己的課堂上做這個嗎?如果是的話,我應該何時何地使用它?在Objective-C中強調前綴變量名稱是什麼意思?
回答
在Cocoa中,這是一個約定來表明某些東西是私人的,不應該在外部使用。然而,這是非官方的慣例,尤其是在這樣的措詞光the documentation:
方法名稱以「_」,單下劃線,保留給蘋果使用。
但是,該建議特別適用於方法,而不是變量。所以如果你想用下劃線爲你的變量加前綴,那就直接前進吧。這就是說,如果你使用下劃線前綴來表示某些數據的私有性質,也許你不應該將它暴露在第一位...
這就是所謂的uglification。關鍵是你從來沒有使用它,所以你創建的變量名或#define
可能永遠干擾蘋果的代碼。具有諷刺意味的是,很多人用這樣的名字創建標題守衛,因爲他們看到系統標題這樣做。
從C99 7.1.3「保留的標識符」:
以下劃線和一個大寫字母或另一個下劃線開頭的所有標識符,始終保留用於任何用途。
(它們意味着系統庫保留。)
注:我不知道的C99和蘋果ObjC之間的確切關係,但你可能也有整個工作命名慣例C語言家族。特別是ObjC++需要有效的C++名稱,這些名稱在任何地方都有額外的要求,不需要雙下劃線。
下劃線妨礙了可讀性。同樣用LLVM代替GCC,我擺脫了header side ivars並使用header side屬性。除非您確實希望讀取和寫入同步以確保線程安全,否則請確保您的屬性不是原子的。除非你指定非原子,否則它將默認爲原子 - 這會剝奪你的某些性能。
也按照慣例,從不使用get啓動訪問器。 setter應該從set開始,但不要get getters。閱讀關於KVO和KVC的更多關於公約和它們的優點。
但我喜歡在枚舉命名列表中強調下劃線。在這裏,下劃線幫助我挑選5行或更多行中的後綴,所有行都以相同的詞幹開頭。 Like typedef NSInteger COMPASS_DIRECTION; 枚舉{ COMPASS_DIRECTION_NORTH, COMPASS_DIRECTION_EAST, COMPASS_DIRECTION_SOUTH, COMPASS_DIRECTION_WEST, };
- 1. 什麼意思前綴::意思是
- 2. NSLog中的前綴是什麼意思?
- 3. C#中變量名之前的@符號是什麼意思?
- 4. 變量之前括號中的類型名稱是什麼意思?
- 5. 在TensorFlow中「變量」是什麼意思?
- 6. 「斜坡」是什麼意思在名稱
- 7. 結構變量的名稱是什麼意思?
- 8. 變量++和變量是什麼意思?
- 9. 臨時表名稱的後綴是什麼意思?
- 10. CString變量名稱前綴
- 11. 「o」是什麼意思作爲一個可變的前綴?
- 12. 以雙冒號爲前綴的常量是什麼意思?
- 13. 在Windows堆棧跟蹤中,「Unloaded」前綴是什麼意思?
- 14. 在Chaplin js框架中,事件前綴是什麼!意思?
- 15. 實例名稱是什麼意思?
- 16. ::什麼都沒有加前綴時是什麼意思?
- 17. UNIX路徑 - 什麼,。,〜,..前綴是什麼意思?
- 18. 是什麼意思「:Q =」在變量名批量CMD
- 19. 在opengl中,變量名後的星號(*)是什麼意思?
- 20. 帶下劃線前綴的合成屬性和變量:這是什麼意思?
- 21. 在Xcode調試變量視圖中,variable.storage是什麼意思?
- 22. python字符串之前的b前綴是什麼意思?
- 23. 這是什麼意思<>和@在mysql之前的變量?
- 24. 強制性是什麼意思? MySQL的用戶變量
- 25. java classname中的$前綴是什麼意思?
- 26. 「__cxa_demangle」中的「cxa」前綴是什麼意思?
- 27. 函數名稱前的星號是什麼意思?
- 28. [變量] = [OtherVariable] = [YetAnotherVariable]是什麼意思?
- 29. 變量= [self]是什麼意思?
- 30. 查詢變量是什麼意思?
我不知道我明白,如果我正在編寫自己的類,我應該如何uglify一些變量,我不打算在子類訪問?或者這應該是一個蘋果代碼的東西? – 2010-10-03 21:59:22
所以基本上它只是爲了避免變量名稱運行到彼此? – 2010-10-03 21:59:51
@Alex:您可以選擇自己的uglification語法,但是初始的下劃線 - 大寫和下劃線 - 下劃線(並且C++在名稱中的任何位置也保留雙下劃線)是爲系統保留的。這適用於所有平臺;這是一種語言功能。 – Potatoswatter 2010-10-03 22:01:46