1. 前言:
命名規(guī)則對(duì)于維護(hù)代碼來(lái)說(shuō)是非常重要的,Objective-C方法名往往很長(zhǎng)确丢,不過(guò)這也有好處魂那,可以更清晰地理解和直觀理解方法六敬,甚至無(wú)須過(guò)多的注釋诡右;
1.基本原則
1.0:代碼清晰
又清晰又簡(jiǎn)潔的代碼當(dāng)然是最好的了安岂,但簡(jiǎn)潔不如清晰重要》牵總的講不要使用單詞的簡(jiǎn)寫域那,除了非常常用的簡(jiǎn)寫以外,盡量使用單詞全稱。API的名稱不要有歧義次员,一看你的API就知道是以什么方式做了什么事情败许,不要讓人有疑問(wèn)!
1.1:一致性
代碼保持一致淑蔚,例如:創(chuàng)建UI相關(guān)的方法,可以使用統(tǒng)一的方法命名市殷,所見即所得,見表知其意刹衫,這樣醋寝,既保證了代碼的一致性,也可以方便我們后續(xù)維護(hù)和管理带迟,也利于團(tuán)隊(duì)代碼風(fēng)格的一致音羞,協(xié)調(diào)!
2.類命名
2.1:命名規(guī)范
小駝峰命名法:第一個(gè)單字以小寫字母開始嗅绰;第二個(gè)單字的首字母大寫,如:testClass
大駝峰命名法:每一個(gè)單字的首字母都采用大寫字母搀继,如:
TestClass
類命名:
首字母大寫办陷,之后每個(gè)單詞首字母都大寫
使用能夠反映類功能的名詞短語(yǔ)
文件和類同名
舉例:BaseClient .h、ImageStore .h
特殊類命名
如果是視圖控制器的子類應(yīng)添加后綴“ViewController”或者“Controller”
如果是視圖的子類應(yīng)添加后綴“View”
如果是按鈕的子類應(yīng)添加后綴“Button”
等……
舉例:SettingsViewController律歼、NavigationView
分類(類別)命名
與類命名相同民镜,此外需添加要擴(kuò)展的類名和“+”
舉例:NSString+URLEncoding
協(xié)議(委托)命名
與類命名相同,此外需添加“Delegate”后綴
舉例:ReplyViewDelegate
方法命名
首字母小寫险毁,之后每個(gè)單詞首字母都大寫
方法名使用動(dòng)詞短語(yǔ)
舉例:- (void)setPostValue:(int)value
方法參數(shù)命名
首字母小寫制圈,之后每個(gè)單詞首字母都大寫
具有足夠的說(shuō)明性
不需要添加類型前綴
舉例:- (void)sendUserInfo:(NSDictionary *)userInfo
常量
常量(宏定義,局部常量等)使用小寫k開頭的駝峰法
舉例:kInvalidHandle , kWritePerm
枚舉類型命名首字母大寫畔况,之后每個(gè)單詞首字母都大寫鲸鹦,最后加“s”
枚舉變量使用枚舉類型去掉“s”作為前綴,每個(gè)單詞首字母大寫跷跪,中間不允許加下劃線
舉例:typedef enum UIControlEvents{
UIControlEventTouchDown,
UIControlEventTouchUpInside
}UIControlEvents;
分組命名
使用英文馋嗜,首字母大寫,之后每個(gè)單詞首字母都大寫
每個(gè)分組使用模塊的名字
使用的開源庫(kù)統(tǒng)一放在“Library”分組下
使用的公共組件統(tǒng)一放在“Common”分組下
視圖控制器及AppDelegate統(tǒng)一放在“Controllers”分組下
2.2:類注釋規(guī)范
一.類的聲明:
/** 類信息吵瞻。此注釋用在類聲明的開頭葛菇。
@class
@abstract 這里可以寫關(guān)于這個(gè)類的一些描述。
*/
示例1:
/** 類信息橡羞。此注釋用在類聲明的開頭眯停。
@TestClass
@這是一個(gè)測(cè)試類
*/
@interface TestClass :UIView
@end
二:變量的聲明
/**
@property property的相關(guān)注釋。
@abstract 這里可以寫關(guān)于這個(gè)Property的一些基本描述卿泽。
*/
示例2:
/**
* name:這是一個(gè)名字莺债;
*/
@property (nonatomic,copy) NSString * name;
三:方法的聲明
/**
@method 函數(shù)(方法)的相關(guān)注釋。
@abstract 這里可以寫一些關(guān)于這個(gè)方法的一些簡(jiǎn)要描述
@discussion 這里可以具體寫寫這個(gè)方法如何使用,注意點(diǎn)之類的齐邦。
如果你是設(shè)計(jì)一個(gè)抽象類或者一個(gè)共通類給給其他類繼承的話椎侠,建議在這里具體描述一下怎樣使用這個(gè)方法。
@param text 文字(這里把這個(gè)方法需要的參數(shù)列出來(lái))
@param error 錯(cuò)誤參照
@result 返回結(jié)果
*/
示例3:
/**
* 這是個(gè)請(qǐng)求數(shù)據(jù)方法措拇;
* result : (NSObject*) 數(shù)據(jù)返回結(jié)果肺蔚;
* block :( doBlock)block 代碼塊,返回結(jié)果需要完成的事儡羔;
*/
-(void)doRequestResult:(NSObject*)result andSuccessBlock:(doBlock)block ;
2.3:書寫規(guī)范
文件都包含文件頭宣羊,要說(shuō)明文件名、作者汰蜘、創(chuàng)建時(shí)間仇冯、變更記錄
多人協(xié)作完成項(xiàng)目時(shí),public接口的每個(gè)方法都應(yīng)該添加關(guān)于函數(shù)族操,參數(shù)苛坚,返回值以及副作用的注釋
當(dāng)if語(yǔ)句的判斷條件復(fù)雜時(shí),需要用注釋說(shuō)明判斷內(nèi)容
接口類(繼承于BaseController)的頭文件每個(gè)方法前都應(yīng)該注明方法的作用
3.文件組織結(jié)構(gòu)
3.1:類文件組織
iOS工程文件結(jié)構(gòu)分物理結(jié)構(gòu)和邏輯結(jié)構(gòu)色难,建議邏輯結(jié)構(gòu)和物理結(jié)構(gòu)保持一致泼舱,以便方便有效地管理類文件。
類文件組織要遵循以下兩大原則:
基于MVC設(shè)計(jì)模式原則枷莉,至少要保證controller與數(shù)據(jù)處理娇昙,網(wǎng)絡(luò)請(qǐng)求相對(duì)獨(dú)立
基于功能模塊原則,功能模塊分包括數(shù)據(jù)/網(wǎng)絡(luò)處理笤妙,UI前端界面兩部分冒掌,數(shù)據(jù)/網(wǎng)絡(luò)處理應(yīng)該在數(shù)據(jù)/網(wǎng)絡(luò)處理的框架下,
而UI前端界面比如用戶中心蹲盘,消息中心股毫,它們的專有的controller,view等應(yīng)該在屬于文件夾召衔。
還會(huì)遇到一些公共的view铃诬,可以開辟出公共的文件夾來(lái)管理。
在實(shí)際中使用中苍凛,項(xiàng)目實(shí)際負(fù)責(zé)人可以結(jié)合項(xiàng)目特點(diǎn)靈活使用趣席,
但基本的原則一定要保持,保持良好的類文件組織結(jié)構(gòu)毫深,對(duì)團(tuán)隊(duì)有益無(wú)害吩坝。
3.2:圖片資源文件組織
圖片資源文件,強(qiáng)烈建議采用Images.xcassets管理哑蔫,
盡量少用自己創(chuàng)建的文件夾管理。
使用Images.xcassets的優(yōu)勢(shì)很多,具體可以查閱讀相關(guān)文獻(xiàn)資料闸迷,這里只從工程管理上說(shuō)一點(diǎn)嵌纲,在Images.xcassets中添加圖片資源,
不會(huì)對(duì)project文件造成改變腥沽,而直接在文件夾里添加圖片文件逮走,每次都會(huì)對(duì)project文件造成改變,
因此使用Images.xcassets管理圖片資源可以減少project沖突的次數(shù)
3.3:類代碼組織原則
一個(gè)原則:
1.析構(gòu)函數(shù)-
(void)dealloc最好放到類最上面今阳,第一眼就可以看到這個(gè)方法师溅,
可以方便看到是否remove了一些操作,對(duì)內(nèi)存的合理釋放等盾舌。
2.controller墓臭,view的生命周期函數(shù)放到最上面
3.自己實(shí)現(xiàn)的方法在下面,相同/相近功能的方法采用#pragma
mark -來(lái)標(biāo)記妖谴,以便查看窿锉。
4. iOS代碼規(guī)范
4.1:團(tuán)隊(duì)規(guī)范
說(shuō)明:一個(gè)好的團(tuán)隊(duì),理所當(dāng)然有其嚴(yán)格的代碼規(guī)范膝舅,好的代碼不僅可以提高團(tuán)隊(duì)的開放效率嗡载,也更利于團(tuán)隊(duì)項(xiàng)目的后期維護(hù),統(tǒng)一的代碼風(fēng)格仍稀,也是團(tuán)隊(duì)的核心洼滚,所以規(guī)范代碼很有必要!
**
1 刪除多余的空行
所有方法與方法之間空1行
所有代碼塊之間空1行
2 刪除多余的注釋
刪除注釋掉的代碼
刪除沒(méi)有意義的注釋
3 刪除多余的方法
如果方法沒(méi)有使用到技潘,請(qǐng)刪除它
如果方法沒(méi)有執(zhí)行任何業(yè)務(wù)邏輯判沟,請(qǐng)刪除它或者給出一定注釋
4 刪除未被使用的資源文件
5 添加必要的注釋
所有.h 文件中的property 需要給出注釋
所有自定義的方法需要給出注釋
比較大的代碼塊需要給出注釋
所有代碼中出現(xiàn)的阿拉伯?dāng)?shù)字需要給出注釋
程序中出現(xiàn)加密/解密 邏輯的操作地方,需要給出注釋說(shuō)明過(guò)程(無(wú)論是系統(tǒng)還是自定義)
6 整體代碼風(fēng)格需要統(tǒng)一
代碼后面的”{“
不需要單獨(dú)占用一行
邏輯運(yùn)算符 與 代碼之前空一格
“#pragma mark -” 與下面的代碼之前不要空行
遵循一般性的代碼規(guī)范
4.2 iOS通用規(guī)范
1 下面所有規(guī)則對(duì)第三方類庫(kù)無(wú)約束
* 所有類、方法、屬性等命名厅翔,做到見名知意肘习,采用駝峰式命名規(guī)則* 根據(jù)資源類型或者所屬業(yè)務(wù)邏輯對(duì)項(xiàng)目資源進(jìn)行分組,使得整個(gè)項(xiàng)目結(jié)構(gòu)清晰明了
* 整個(gè)項(xiàng)目保持一種代碼書寫風(fēng)格(這個(gè)風(fēng)格由團(tuán)隊(duì)根據(jù)自己編碼習(xí)慣來(lái)定)钓试,讓你的代碼變的優(yōu)雅!
2. 命名規(guī)范
* 所有類名稱以項(xiàng)目工程開頭命名,:“QMX”斯入、“SX”、“CS”,”PF”等···蛀蜜;
* 針對(duì)不同視圖控制器刻两,在末尾添加后綴,
* UIViewController 后綴添加“ViewController”
* UIView 后綴添加“View”
* UIButton 后綴添加“Button"
* UILabel 后綴添加“Label"
3. 單頁(yè)代碼最好控制在800行以內(nèi)滴某,每個(gè)方法最好不要超過(guò)100行磅摹,過(guò)多建議對(duì)代碼進(jìn)行重構(gòu)
4. 相同的邏輯方法定義避免在多個(gè)地方出現(xiàn)滋迈,盡量將公用的類、方法抽取出來(lái)
5. 刪除未被使用的代碼户誓,不要大片注釋未被使用的代碼饼灿,確定代碼不會(huì)使用,請(qǐng)及時(shí)刪除
6. 對(duì)其他項(xiàng)目中copy過(guò)來(lái)的代碼帝美,根據(jù)具體需要更新代碼風(fēng)格碍彭,及時(shí)刪除未被使用的代碼
7. 項(xiàng)目中所有Group或者文件名稱(圖片名字等),不要使用漢字命名悼潭,盡量使用英文命名庇忌,國(guó)內(nèi)特有名詞可以使用拼音。
8. 項(xiàng)目中所有Group都需要在項(xiàng)目目錄中存在一個(gè)真實(shí)的目錄舰褪,Group中的文件與真實(shí)目錄中文件一一對(duì)應(yīng)皆疹。
9. 請(qǐng)?jiān)陧?xiàng)目中寫必要代碼的注釋
10. 請(qǐng)多使用 #pragma
mark - Mark Name 對(duì)方法進(jìn)行分組
5.版權(quán)聲明
該規(guī)范為iOS開發(fā)人員共同代碼規(guī)范,共同維護(hù)開發(fā)抵知,
如有更好的建議墙基,歡迎在此基礎(chǔ)上進(jìn)行修改并在版本歷史記錄中添加修改內(nèi)容,謝謝