【iOS】命名規(guī)范

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)容,謝謝
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市刷喜,隨后出現(xiàn)的幾起案子残制,更是在濱河造成了極大的恐慌,老刑警劉巖掖疮,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件初茶,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡浊闪,警方通過(guò)查閱死者的電腦和手機(jī)恼布,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)搁宾,“玉大人折汞,你說(shuō)我怎么就攤上這事「峭龋” “怎么了爽待?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)翩腐。 經(jīng)常有香客問(wèn)我鸟款,道長(zhǎng),這世上最難降的妖魔是什么茂卦? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任何什,我火速辦了婚禮,結(jié)果婚禮上等龙,老公的妹妹穿的比我還像新娘处渣。我一直安慰自己伶贰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布霍比。 她就那樣靜靜地躺著幕袱,像睡著了一般暴备。 火紅的嫁衣襯著肌膚如雪悠瞬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天涯捻,我揣著相機(jī)與錄音浅妆,去河邊找鬼。 笑死障癌,一個(gè)胖子當(dāng)著我的面吹牛凌外,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涛浙,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼康辑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了轿亮?” 一聲冷哼從身側(cè)響起疮薇,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎我注,沒(méi)想到半個(gè)月后按咒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡但骨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年励七,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奔缠。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掠抬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出校哎,到底是詐尸還是另有隱情两波,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布贬蛙,位于F島的核電站雨女,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏阳准。R本人自食惡果不足惜氛堕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望野蝇。 院中可真熱鬧讼稚,春花似錦括儒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至赠摇,卻和暖如春固逗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背藕帜。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工烫罩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人洽故。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓贝攒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親时甚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子隘弊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 小駝峰命名法(CamelCase):第一個(gè)單詞小寫字母開頭,其他單詞首字母大寫荒适;大駝峰命名法(PascalCase...
    Paco_Ke閱讀 682評(píng)論 2 0
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,757評(píng)論 25 707
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法梨熙,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法吻贿,繼承相關(guān)的語(yǔ)法串结,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 31,598評(píng)論 18 399
  • 我相信有人一生 只碰過(guò)兩片櫻唇 卻不相信誰(shuí)能一生 只幻想一個(gè)女人 光怪的掌紋 裙下的游魂 裝醉假寐也都騙不過(guò)風(fēng)塵 ...
    段童閱讀 497評(píng)論 0 1
  • “……舅媽好舅列。你肌割,怎么這么快就接電話了?”“我正在玩手機(jī)帐要,所以就自動(dòng)接通了把敞。”“哦哦榨惠》茉纾”“說(shuō)吧,有什么事求我赠橙〉⒆埃”“...
    珉二少閱讀 641評(píng)論 8 3