2010-10-03 53 views

回答

4

在Cocoa中,這是一個約定來表明某些東西是私人的,不應該在外部使用。然而,這是非官方的慣例,尤其是在這樣的措詞光the documentation

方法名稱以「_」,單下劃線,保留給蘋果使用。

但是,該建議特別適用於方法,而不是變量。所以如果你想用下劃線爲你的變量加前綴,那就直接前進吧。這就是說,如果你使用下劃線前綴來表示某些數據的私有性質,也許你不應該將它暴露在第一位...

8

這就是所謂的uglification。關鍵是你從來沒有使用它,所以你創建的變量名或#define可能永遠干擾蘋果的代碼。具有諷刺意味的是,很多人用這樣的名字創建標題守衛,因爲他們看到系統標題這樣做。

從C99 7.1.3「保留的標識符」:

以下劃線和一個大寫字母或另一個下劃線開頭的所有標識符,始終保留用於任何用途。

(它們意味着系統庫保留。)

注:我不知道的C99和蘋果ObjC之間的確切關係,但你可能也有整個工作命名慣例C語言家族。特別是ObjC++需要有效的C++名稱,這些名稱在任何地方都有額外的要求,不需要雙下劃線。

+0

我不知道我明白,如果我正在編寫自己的類,我應該如何uglify一些變量,我不打算在子類訪問?或者這應該是一個蘋果代碼的東西? – 2010-10-03 21:59:22

+0

所以基本上它只是爲了避免變量名稱運行到彼此? – 2010-10-03 21:59:51

+0

@Alex:您可以選擇自己的uglification語法,但是初始的下劃線 - 大寫和下劃線 - 下劃線(並且C++在名稱中的任何位置也保留雙下劃線)是爲系統保留的。這適用於所有平臺;這是一種語言功能。 – Potatoswatter 2010-10-03 22:01:46

2

下劃線妨礙了可讀性。同樣用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, };

相關問題