淺談Objective-C編碼規(guī)范
淺談Objective-C編碼規(guī)范是本文要介紹的內(nèi)容,主要講述了Objective-C的編碼規(guī)范。編碼規(guī)范的合理性,相信編程人員都知道是最需要注意的一個(gè)內(nèi)容,不多說(shuō),先來(lái)看詳細(xì)內(nèi)容講解。
格式化代碼
指針“*”號(hào)的位置 ▪ 如:NSString *varName;
空格 VS tabs ▪ 只允許使用空格,將編輯器設(shè)置為1個(gè)TAB = 2個(gè)字符縮進(jìn)
每行的長(zhǎng)度
每行最多不得超過(guò)100個(gè)字符
以15寸Macbook Pro的大小,每行100個(gè)字符時(shí)能***化地同時(shí)容下編輯器和iPhone模擬器
Google的80字符的標(biāo)準(zhǔn)有點(diǎn)少,這導(dǎo)致過(guò)于頻繁的換行(Objectve-C的代碼一般都很長(zhǎng))
通過(guò) “Xcode => Preferences => TextEditing => 勾選Show Page Guide / 輸入
100 => OK” 來(lái)設(shè)置提醒 ◦ 方法的聲明和定義
在 - OR + 和返回值之間留1個(gè)空格,方法名和***個(gè)參數(shù)間不留空格。如:
- - (void)doSomethingWithString:(NSString *)theString {
- ...
- }
當(dāng)參數(shù)過(guò)長(zhǎng)時(shí),每個(gè)參數(shù)占用一行,以冒號(hào)對(duì)齊。如:
- - (void)doSomethingWith:(GTMFoo *)theFoo
- }
- ...
- rect:(NSRect)theRect interval:(float)theInterval {
如果方法名比參數(shù)名短,每個(gè)參數(shù)占用一行,至少縮進(jìn)4個(gè)字符,且為垂直對(duì)齊(而非使用冒號(hào) 對(duì)齊)。如:
- - (void)short:(GTMFoo *)theFoo
- }
- longKeyword:(NSRect)theRect
- evenLongerKeyword:(float)theInterval { ...
方法的調(diào)用 ▪ 調(diào)用方法沿用聲明方法的習(xí)慣。例外:如果給定源文件已經(jīng)遵從某種習(xí)慣,繼續(xù)遵從那種習(xí)慣。 ▪ 所有參數(shù)應(yīng)在同一行中,或者每個(gè)參數(shù)占用一行且使用冒號(hào)對(duì)齊。如:
- [myObject doFooWith:arg1 name:arg2 error:arg3];
或
- [myObject doFooWith:arg1 name:arg2
- error:arg3];
和方法的聲明一樣,如果無(wú)法使用冒號(hào)對(duì)齊時(shí),每個(gè)參數(shù)一行、縮進(jìn)4個(gè)字符、垂直對(duì)其(而非 使用冒號(hào)對(duì)齊)。如:
- [myObj short:arg1
- longKeyword:arg2
- evenLongerKeyword:arg3];
@public 和 @private ▪ @public 和 @private使用單獨(dú)一行,且縮進(jìn)1個(gè)字符
Protocals類(lèi)型標(biāo)示符、代理名稱(chēng)、尖括號(hào)間不留空格。該規(guī)則同樣適用于:類(lèi)聲明、實(shí)例變量和方法聲明。如:
- @interface MyProtocoledClass : NSObject<NSWindowDelegate> { @private
- id<MyFancyDelegate> _delegate;
- } - (void)setDelegate:(id<MyFancyDelegate>)aDelegate; @end
如果類(lèi)聲明中包含多個(gè)protocal,每個(gè)protocal占用一行,縮進(jìn)2個(gè)字符。如: @interface CustomViewController : ViewController<
- AbcDelegate,
- DefDelegate >{
- }
命名 ◦ 類(lèi)名
類(lèi)名(及其category name 和 protocal name)的首字母大寫(xiě),寫(xiě)使用首字母大寫(xiě)的形式 分割單詞
在面向特定應(yīng)用的代碼中,類(lèi)名應(yīng)盡量避免使用前綴,每個(gè)類(lèi)都使用相同的前綴影響可讀性。
在面向多應(yīng)用的代碼中,推薦使用前綴。如:GTMSendMessage ◦ Category Name
待完善 ◦ 方法名
方法名的首字母小寫(xiě),且使用首字母大寫(xiě)的形式分割單詞。方法的參數(shù)使用相同的規(guī)則。 ▪ 方法名+參數(shù)應(yīng)盡量讀起來(lái)像一句話(如:)。
在這里查看蘋(píng)果對(duì)方法命名的規(guī)范。 ▪ getter的方法名和變量名應(yīng)相同。不允許使用“get”前綴。如:
- - (id) getDelegate; // 禁止
- - (id)delegate; // 對(duì)頭
本規(guī)則僅針對(duì)Objective-C代碼,C++代碼使用C++的習(xí)慣
變量名 ▪ 變量名應(yīng)使用容易意會(huì)的應(yīng)用全稱(chēng),且首字母小寫(xiě),且使用首字母大寫(xiě)的形式分割單詞 ▪ 成員變量使用“_”作為前綴(如:“NSString *_varName;”。
雖然這與蘋(píng)果的標(biāo)準(zhǔn)(使用“_”作為后綴)相沖突,但基于以下原因,仍使用“_”作為前綴。 ▪ 使用“_”作為前綴,更容易在有代碼自動(dòng)補(bǔ)全功能的IDE中區(qū)分“屬性
(self.userInfo)”和“成員變量(_userInfo)” ▪ 常量(#define, enums, const等)使用小寫(xiě)“k”作為前綴,首字母大寫(xiě)來(lái)分割單詞。如:
- kInvalidHandle
注釋 ◦ 待完善
Cocoa 和 Objective-C特有的規(guī)則 ◦ 成員變量使用@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
小結(jié):淺談Objective-C編碼規(guī)范的內(nèi)容介紹完了,希望本文對(duì)你有所幫助。更多關(guān)于Objective-C的內(nèi)容,請(qǐng)參考編輯推薦。