淺談Objective-C編碼規範是本文要介紹的內容,主要講述了Objective-C的編碼規範。編碼規範的合理性,相信編程人員都知道是最需要注意的一個內容,不多說,先來看詳細內容講解。
格式化代碼
指標“*”號的位置 ▪ 如:NSString *varName;
空格 VS tabs ▪ 只允許使用空格,將編輯器設定為1個TAB = 2個字元縮排
每行的長度
每行最多不得超過100個字元
以15寸Macbook Pro的大小,每行100個字元時能最大化地同時容下編輯器和iPhone模擬器
Google的80字元的標準有點少,這導致過於頻繁的換行(Objectve-C的代碼一般都很長)
通過 “Xcode => Preferences => TextEditing => 勾選Show Page Guide / 輸入
100 => OK” 來設定提醒 ◦ 方法的聲明和定義
在 - OR + 和傳回值之間留1個空格,方法名和第一個參數間不留空格。如:
- - (void)doSomethingWithString:(NSString *)theString {
- ...
- }
當參數過長時,每個參數佔用一行,以冒號對齊。如:
- - (void)doSomethingWith:(GTMFoo *)theFoo
- }
- ...
- rect:(NSRect)theRect interval:(float)theInterval {
如果方法名比參數名短,每個參數佔用一行,至少縮排4個字元,且為垂直對齊(而非使用冒號 對齊)。如:
- - (void)short:(GTMFoo *)theFoo
- }
- longKeyword:(NSRect)theRect
- evenLongerKeyword:(float)theInterval { ...
方法的調用 ▪ 調用方法沿用聲明方法的習慣。例外:如果給定源檔案已經遵從某種習慣,繼續遵從那種習慣。 ▪ 所有參數應在同一行中,或者每個參數佔用一行且使用冒號對齊。如:
- [myObject doFooWith:arg1 name:arg2 error:arg3];
或
- [myObject doFooWith:arg1 name:arg2
- error:arg3];
和方法的聲明一樣,如果無法使用冒號對齊時,每個參數一行、縮排4個字元、垂直對其(而非 使用冒號對齊)。如:
- [myObj short:arg1
- longKeyword:arg2
- evenLongerKeyword:arg3];
@public 和 @private ▪ @public 和 @private使用單獨一行,且縮排1個字元
Protocals類型標示符、代理名稱、角括弧間不留空格。該規則同樣適用於:類聲明、執行個體變數和方法聲明。如:
- @interface MyProtocoledClass : NSObject<NSWindowDelegate> { @private
- id<MyFancyDelegate> _delegate;
- } - (void)setDelegate:(id<MyFancyDelegate>)aDelegate; @end
如果類聲明中包含多個protocal,每個protocal佔用一行,縮排2個字元。如: @interface CustomViewController : ViewController<
- AbcDelegate,
- DefDelegate >{
- }
命名 ◦ 類名
類名(及其category name 和 protocal name)的首字母大寫,寫使用首字母大寫的形式 分割單詞
在面向特定應用的代碼中,類名應盡量避免使用首碼,每個類都使用相同的首碼影響可讀性。
在面向多應用的代碼中,推薦使用首碼。如:GTMSendMessage ◦ Category Name
待完善 ◦ 方法名
方法名的首字母小寫,且使用首字母大寫的形式分割單詞。方法的參數使用相同的規則。 ▪ 方法名+參數應盡量讀起來像一句話(如:)。
在這裡查看蘋果對方法命名的規範。 ▪ getter的方法名和變數名應相同。不允許使用“get”首碼。如:
- - (id) getDelegate; // 禁止
- - (id)delegate; // 對頭
本規則僅針對Objective-C代碼,C++代碼使用C++的習慣
變數名 ▪ 變數名應使用容易意會的應用全稱,且首字母小寫,且使用首字母大寫的形式分割單詞 ▪ 成員變數使用“_”作為首碼(如:“NSString *_varName;”。
雖然這與蘋果的標準(使用“_”作為尾碼)相衝突,但基於以下原因,仍使用“_”作為首碼。 ▪ 使用“_”作為首碼,更容易在有代碼自動補全功能的IDE中區分“屬性
(self.userInfo)”和“成員變數(_userInfo)” ▪ 常量(#define, enums, const等)使用小寫“k”作為首碼,首字母大寫來分割單詞。如:
- kInvalidHandle
注釋 ◦ 待完善
Cocoa 和 Objective-C特有的規則 ◦ 成員變數使用@private。如:
- @interface MyClass : NSObject { @private
- id _myInstanceVariable;
- } // public accessors, setter takes ownership - (id)myInstanceVariable; - (void)setMyInstanceVariable:(id)theVar; @end
- Indentify Designated Initializer ▪ 待完善
- Override Desingated Initializer
小結:淺談Objective-C編碼規範的內容介紹完了,希望本文對你有所協助。