1.目的
統(tǒng)一規(guī)范XCode編輯環(huán)境下Objective-C的編碼風(fēng)格和標(biāo)準(zhǔn)
2.使用范圍
適用于所有用Objective-C語(yǔ)言開發(fā)的項(xiàng)目。
3.編碼規(guī)范
3.1、注釋
1)注釋可以采用’ /* */ ’和’ // ’兩種注釋符號(hào),涉及到多行注釋時(shí),盡量使用’ /* */ ’。
2)對(duì)于一行代碼的注釋可放在前一行及本行上,不允許放在下一行,更不允許在一行語(yǔ)句的
中間加入注釋。
3)單元文件的文件頭注釋說(shuō)明應(yīng)按如下格式:
//文件名
//工程名//
// ?Created by創(chuàng)建者on期.
// Copyright 2010 . All rights reserved.//
//系統(tǒng)名稱:
//功能描述:
//修改記錄:(僅記錄功能修改)
//????????????? 張三2012-02-02創(chuàng)建該單元
//????????????? 小明2010-03-02增加本地點(diǎn)單功能。
//
4)方法前 的注釋遵循以下格式:如果某項(xiàng)沒(méi)有,則以N/A表
例如:
/**********************************************************
函數(shù)名稱:-(BOOL)showFiveAndSixStairRoomCountByStatu
函數(shù)描述:顯示特定狀態(tài)下五樓和六樓的房間數(shù)
輸入?yún)?shù):(NSString *)statu:某狀態(tài)。
輸出參數(shù):(int *)roomCount:該狀態(tài)房間數(shù)量。
返回值:BOOL:操作是否成功。
**********************************************************/
- (void)ShowFiveAndSixStairRoomCountByStatu:(NSString *)staturoomCount:(int*)_roomCount;
或
/**********************************************************
函數(shù)名稱:-(NS UInteger)showF iveAndS ixS tairRoomCount
函數(shù)描述:顯示五樓六樓的房間數(shù)。
輸入?yún)?shù):N/ A
輸出參數(shù):N/ A
返回值:NSUInteger :房間數(shù)量。
**********************************************************/
- (NSUInteger)showFiveAndSixStairRoomCount
5)不必每 都加注釋,在3~10左右的段落做注釋要好于每 都做注釋,顯 易 的代碼不加注釋。
例如:
If (!returnValue)
{
NSLog(@”登錄失敗”);
}
3.3、編碼排版格式
1)代碼的縮進(jìn)應(yīng)使 空格(SPACE),不能使 制表符(TAB),并且縮進(jìn)以2個(gè)字符為單位。
2)中括弧的每 個(gè)括弧在源程序中要單獨(dú)占? 。例如
//不正確 法
for (int i = 0; i < 10 ; i++){
}
//正確用法
for (int i = 0; i < 10; i++)
{
......
}
3)空格的使
a)關(guān)鍵字與其后的表達(dá)式之間要有空格,如:
if ( expr )
或
for (expr)
b)單 操作符不應(yīng)與它們的操作數(shù)分開(如’!’和’^’等)。
c)除’ , ’外,其它雙目操作符應(yīng)與它們的操作數(shù)用空格隔開。
例如
i=i+1;//錯(cuò)誤的寫法,操作符兩端沒(méi)有空格
i = i + 1;//正確的寫法,
if(a>b)//錯(cuò)誤的寫法,邏輯判斷符號(hào)兩端沒(méi)有空格
if(a > b)//正確的寫法
d) .h中協(xié)議<>前面有一個(gè)空格。
e) .h中成員聲明時(shí),類型與變量之間有至少1個(gè)空格。*號(hào)靠近變量,不靠近類型。
f) @property后留1個(gè)空格,()里面,逗號(hào)緊跟前一變量,與后一變量之間留1個(gè)空
格。()外面,先留1個(gè)空格,再聲明屬性。
g)方法的+,-后面與()之間留1個(gè)空格。
h)返回類型與*之間留1個(gè)空格,方法參數(shù)中返回類型與*之間留1個(gè)空格。
i)在多參數(shù)方法中,每個(gè)參數(shù)后面都有1個(gè)空格。
4)每行只能有一個(gè)語(yǔ)句
例如
//不正確寫法
NSUInteger objectIndex, stuffCount;
或
objectIndex = objectIndex + 10, stuffCount = stuffCount + 20;
或
@synthesize MyView, MyLabelView;
//正確寫法
NSUInteger objectIndex;
NSUInteger stuffCount;
或
objectIndex = objectIndex + 10;
stuffCount = stuffCount + 20;
或
@synthesize MyView;
@synthesize MyLabelView;
5)關(guān)于空行
a) .h中的空行
、文件說(shuō)明與頭文件包含(#import)之間空1行
、頭文件包含(#import)之間,如果需要分類區(qū)別,各類別之間空1行。
、頭文件包含(#import)與@class之間空2行。
、@interface與@class之間空1行。
、頭文件{}里面,空1行開始聲明對(duì)象成員,如果需要分類區(qū)別,各類別之間空1
行。
、頭文件{}外,空1行書寫屬性,如果需要分類區(qū)別,各類別之間空1行。
、屬性下面空1行開始寫方法,如果需要分類區(qū)別,各類別之間空1行。
、方法完成后,空1行@end。
、如果需要聲明protocol,空2行接著寫。通常protocol寫在@end后面,但是聲明
在@interface之前。
b) .m中的空行
、文件說(shuō)明與頭文件包含(#import)之間空1行
、頭文件包含(#import)之間,如果需要分類區(qū)別,各類別之間空1行。
、@implementation和@synthesize之間空1行,如果需要分類區(qū)別,各類別之間
空1行。
、@synthesize與方法之間空1行。
、方法與方法之間空1行。
C)方法里面的空行
、變量聲明后需要空1行,如果需要分類區(qū)別,各類別之間空1行。
、條件、循環(huán),選擇語(yǔ)句,整個(gè)語(yǔ)句結(jié)束,需要空1行。
、各功能快之間空1行。
、最后一個(gè)括弧之前不空行。
、注釋與代碼之間不空行。
、#pragma mark與方法之間空1行。
d)每行代碼最多不得操作100個(gè)字。設(shè)置如下:Xcode => Preferences => TextEditing
=> Page Guide at column /輸入100即可。
3.2、命名規(guī)范
3.2.1、保留字
Objective-c語(yǔ)言的保留字或關(guān)鍵詞應(yīng)全部使用小寫字母,除下表中保留字外,private、protected、public、在類型說(shuō)明中也作為保留字使用。還有nonatomanic,retain,readwrite,
readonly等也有特殊的使用場(chǎng)合。
_Bool,_Complex,_Imaginary,auto,break,bycopy,byref,case,char,const,continue
,default,do,double,else,enum,extern,float,for,goto,if,in,inline
,inout,int,long,oneway,out,register,restrict,return,self,short,signed,sizeof,static,
struct,super,switch,typedef,union,unsigned,void,volatile,while
3.2.2、方法
1)方法的名稱應(yīng)全部使用有意義的單詞組成,且以小寫字母開頭,多單詞組合時(shí),后面的單詞
首字母大寫。
例如:
-(void)getUserInformation......
2)設(shè)置類變量的內(nèi)容的方法應(yīng)使用set作為前綴,讀取變量的內(nèi)容的方法應(yīng)使用get作為前綴。
例如:
-(void)getUserName;
-(void)setUserName:(NSString *)userName;
3)方法中的參數(shù):第一個(gè)參數(shù)名稱要從函數(shù)名稱上攜帶出來(lái),第二個(gè)參數(shù)的首字母小寫,多個(gè)
單詞組合時(shí),后面單詞首字母大寫。參數(shù)有別名時(shí),參數(shù)別名與參數(shù)名一致,但參數(shù)名前綴
以_。參數(shù)別名與前一參數(shù)保留1個(gè)空格。參數(shù)無(wú)別名時(shí),以有意義的字母命名。
例如:
-(void)myFunctionWithSizeA:(CGSize)sizeA sizeB:(CGSize)_sizeB;
3.2.3、變量
1)變量必須起有意義的名字,使其他組員可以很容易讀懂變量所代表的意義,變量命名可以采
用同義的英文命名,可使用幾個(gè)英文單詞,第一個(gè)單詞首字母小寫,其他單詞首字母大寫。
例如:
NSString *username;
2)對(duì)于一些特殊類型的變量,命名時(shí)要帶上類型,如NSArray的變量命名為xxxArray,其他的
如xxxDictionary,xxxSize等。這樣就可以從名稱上知道是什么類型的變量。千萬(wàn)不能將
NS Array的變量命名為xxxDictionary。
3)對(duì)于要和interface builder關(guān)聯(lián)的的輸出口變量,命名時(shí)要后綴以特定的控件名。
例如:IBOutlet UILabel *userNameLabel;
4)對(duì)于使c語(yǔ) 形式聲明的變量, 些特定類型可采? 定的簡(jiǎn)寫:
例如:
指針類型:P
結(jié)構(gòu)體類型:Rec
數(shù)組類型:Arr
Core Graphic:CG等。
循環(huán)控制變量通常使 單 的字符如:i、j、k等。使 有意義的名字,如
objectIndex也是可以的。
5)盡量避免使 全局變量,如果必須使 全局變量則必須加前綴‘ Pub_’,同時(shí)應(yīng)在變量名稱中體現(xiàn)變量的類型。
6)私有實(shí)例變量前加一個(gè)下劃線,如_myPrivateVarible。
7)枚舉變量也要有相應(yīng)的前綴來(lái)區(qū)分不同的enum變量。比如蘋果公司的一個(gè)enum。
例如:
typedef enum CGPathDrawingMode CGPathDrawingMode;
/* Drawing modes for text. */
enum CGTextDrawingMode
{
kCGTextFill,
kCGTextStroke,
kCGTextFillStroke,
kCGTextInvisible,
kCGTextFillClip,
kCGTextStrokeClip,
kCGTextFillStrokeClip,
kCGTextClip
};
3.2.4、常量
1)避免在程序中直接出現(xiàn)常數(shù),使用超過(guò)一次的應(yīng)以宏定義的形式來(lái)替代。
2)常數(shù)的宏定義應(yīng)與它實(shí)際使用時(shí)的類型相一致。如以3.0來(lái)定義浮點(diǎn)類型,用3表示整型。
3)常量的命名應(yīng)當(dāng)能夠表達(dá)出它的用途,并且用大寫字母表示。
例如:#define PI 3.1415926
4)一些常量前加特殊前綴,可以作為不同常量的區(qū)分,
例如:
UserDefaultsKey的變量前加UDKEY_,
UserDefaultsKey的變量前加UDKEY_,
NotificationNameKey前面加NNKEY_,
DictionaryKey前面加DICTKEY_,
3.2.5、類
1)所有的類名,接口名(Protocol)均以大寫字母開頭,多單詞組合時(shí),后面的單詞首字
母大寫。類,接口名必須是有意義的。
2)繼承自UIView的類以View結(jié)尾。
例如:OperatorUsersInfomationView,LabelView等。
3)繼承自ViewController的類以viewController結(jié)尾。
例如:HomePageViewController,LoginViewController等。其他類推。
4)所有保存數(shù)據(jù)的實(shí)體以Model結(jié)尾。例如:
UserModel,
3.2.5、圖片
基本格式為:模塊描述+功能描述+其它描述
如下:
1)如公共模塊的圖片,以Common開頭
CommonDelete@2x.png
2)如通訊錄模塊的圖片,以ADB開頭
AdbAddGroup@2x.png
3.2.5、控件ID
基本格式為:控件類型+模塊描述+功能描述+其它描述
如下:
1)如通訊錄模塊的刪除群組按鈕ID名稱,可以使用以下命名
btnADBDeleteGroup
3.3、修改規(guī)范
3.5.1、新增代碼行
新增代碼行的前后應(yīng)有注釋行說(shuō)明。
//修改人,修改時(shí)間,修改說(shuō)明
新增代碼行
//修改結(jié)束
3.3.2、刪除代碼行
刪除代碼向的前后用注釋行說(shuō)明
//修改人,修改時(shí)間,修改說(shuō)明
要?jiǎng)h除的代碼行(將要?jiǎng)h除的語(yǔ)句進(jìn)行注釋)
//修改結(jié)束
3.3.3、修改代碼行
修改代碼行以注釋舊代碼行后再新增代碼行的方式進(jìn)行。
//修改人,修改時(shí)間,修改說(shuō)明
//修改前代碼行開始
//修改前代碼行
//修改前代碼行結(jié)束
//修改后代碼行開始修改后代碼行
//修改結(jié)束