iOS開發(fā)規(guī)范

iOS開發(fā)規(guī)范

引子

在看下面之前,大家自我檢測(cè)一下自己寫的代碼是否規(guī)范,代碼風(fēng)格是否過于迥異閱讀困難胸完?可以相互閱讀同伴的代碼,是否存在閱讀障礙翘贮?

若存在晦澀難懂的赊窥,理解成本增大的代碼,說明你的團(tuán)隊(duì)需要自省了狸页。

下面總結(jié)一下OC編程中的一些代碼規(guī)范(蘋果官方推薦的)锨能。以O(shè)C為示例,但不局限于OC芍耘,也可以被當(dāng)作別的編程語(yǔ)言的開發(fā)規(guī)范約定(僅需要把OC特有的東西按照你所使用的語(yǔ)言的慣例即可)

參考資料:蘋果代碼規(guī)范 對(duì)建議的代碼規(guī)范的說明

命名

命名規(guī)則對(duì)于維護(hù)代碼來說是非常重要的,腹侣。Objective-C方法名往往很長(zhǎng),不過這也有好處齿穗,讓很多注釋變得毫無意義傲隶。

本文推薦駝峰法,也是Objective-C社區(qū)的標(biāo)準(zhǔn)窃页。

駝峰法分小駝峰法和大駝峰法跺株。小駝峰法:除第一個(gè)單詞之外,其他單詞首字母大寫脖卖。大駝峰法相比小駝峰法乒省,大駝峰法把第一個(gè)單詞的首字母也大寫了。

1.基本原則

1.1 清晰

又清晰又簡(jiǎn)潔是最好的了畦木,但簡(jiǎn)潔不如清晰重要袖扛。總的講不要使用單詞的簡(jiǎn)寫,除了非常常用的簡(jiǎn)寫以外蛆封,盡量使用單詞全稱唇礁。API的名稱不要有歧義,一看你的API就知道是以什么方式做了什么事情惨篱,不要讓人有疑問

1.2 一致性

做某個(gè)事情代碼通常都叫這個(gè)名字盏筐,比如tag、setStringValue砸讳,那么你也這么叫琢融。你在不確定怎么起名字的時(shí)候,可以參考一些常用的名字:Method Arguments

2. 類命名

類名(不包括類別和協(xié)議名)應(yīng)該用大寫開頭的大駝峰命名法簿寂。類名中應(yīng)該包含一個(gè)或多個(gè)名詞來說明這個(gè)類(或者類的對(duì)象)是做什么的漾抬。

在應(yīng)用級(jí)別的代碼里,盡量不要使用帶前綴的類名常遂。每個(gè)類都有相同的前綴不能提高可讀性奋蔚。不過如果是編寫多個(gè)應(yīng)用間的共享代碼,前綴就是可接受并推薦的做法了(型如 JKPhotoBrowser )烈钞。

示例1:

@interface ImageBrowseView :UIView

@end

示例2:(帶前綴JK)

@interface JKPhotoBrowser :UIView

@end

3. 類別命名

類名+標(biāo)識(shí)+擴(kuò)展(UIImageView +HP+Web)

例:如果我們想要?jiǎng)?chuàng)建一個(gè)基于UIImageView 的類別用于網(wǎng)絡(luò)請(qǐng)求圖片泊碑,我們應(yīng)該把類別

放到名字是UIImageView+HPWeb.h的文件里。UIImageView為要擴(kuò)展的類名毯欣,HP為專屬標(biāo)

識(shí)馒过,Web為擴(kuò)展的功能。

類別的方法應(yīng)該都使用一個(gè)前綴(型如hp_myCategoryMethodOnAString ),以防止Objective-

C代碼在單名空間里沖突酗钞。如果代碼本來就不考慮共享或在不同的地址空間(address-

space)腹忽,方法命名規(guī)則就沒必要恪守了嗤放。

類別HPWeb頭文件贰拿,UIImageView+HPWeb.h如下:

@interface UIImageView (HPWeb)

- (void)hp_setImageWithURLString:(NSString *)urlStr;

@end

4. 方法命名

方法使用小駝峰法命名, 一個(gè)規(guī)范的方法讀起來應(yīng)該像一句完整的話,讀過之后便知函數(shù)

的作用右蒲。執(zhí)行性的方法應(yīng)該以動(dòng)詞開頭葫录,小寫字母開頭着裹,返回性的方法應(yīng)該以返回的內(nèi)容

開頭,但之前不要加get米同。

示例:

- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;

(instancetype)arrayWithArray:(NSArray *)array;

如果有參數(shù)骇扇,函數(shù)名應(yīng)該作為第一個(gè)參數(shù)的提示信息,若有多個(gè)參數(shù)面粮,在參數(shù)前也應(yīng)該有

提示信息(一般不必加and)

一些經(jīng)典的操作應(yīng)該使用約定的動(dòng)詞少孝,如initWith,insert,remove,replace,add等等。

5. 變量命名

變量名使用小駝峰法, 使變量名盡量可以推測(cè)其用途屬性具有描述性熬苍。別一心想著少打幾

個(gè)字母稍走,讓你的代碼可以迅速被理解更加重要。

5.1 類成員變量:

成員變量用小駝峰法命名并前綴下劃線,Objective-C 2.0婿脸,@property 和 @synthesize 提供

了遵守命名規(guī)范的解決方法

示例:

@interface ViewController ()

@property (nonatomic,strong)NSMutableArray? ? *dataArray;

@property (nonatomic,strong)UITableView? ? ? *tableView;

@end

@implementation ViewController

@end

5.2 一般變量命名

示例:

NSMutableArray? *ticketsArray = [NSMutableArrayarrayWithCapacity:0];

NSInteger numCompletedConnections =3;

5.3 常量命名

常量(預(yù)定義粱胜,枚舉,局部常量等)使用小寫k開頭的駝峰法盖淡,比如kInvalidHandle ,

kWritePerm

示例:

#define kRunAnnotationStartPointTitle? ? @“起點(diǎn)"

typedef NS_ENUM (NSInteger,RunGoalTypeE){

kRunGoalTypeNone? ? ? = 0,? ? //無目標(biāo)

kRunGoalTypeTime? ? ? = 1,? ? //以時(shí)間為目標(biāo)

kRunGoalTypeDistance? = 2,? ? //以距離為目標(biāo)

kRunGoalTypeCalori? ? = 3,? ? //以消耗卡路里為目標(biāo)

};

NSString *const kGroupInfoName =@"name";

6. 圖片資源文件命名

先看下新浪微博app圖片資源命名方式,下面是部分截圖:

這個(gè)圖片資源命名方式凿歼,以功能為組織形式褪迟,是一個(gè)很好的習(xí)慣,有利于查看資源文件答憔。

原則:

1)采用單詞全拼味赃,或者大家公認(rèn)無岐義的縮寫(比如:nav,bg虐拓,btn等)

2)采用“模塊+功能”命名法心俗,模塊分為公共模塊、私有模塊蓉驹。公共模塊主要包括統(tǒng)一的背

景城榛,導(dǎo)航條,標(biāo)簽态兴,公共的按鈕背景狠持,公共的默認(rèn)圖等等;私有模塊主要根據(jù)app的業(yè)務(wù)

功能模塊劃分瞻润,比如用戶中心喘垂,消息中心等

備注:建議背景圖采用以bg作前綴,按鈕背景采用btn作前綴(不作強(qiáng)制要求绍撞,項(xiàng)目實(shí)際

負(fù)責(zé)人根據(jù)團(tuán)隊(duì)特點(diǎn)確定即可)

公共模塊命名示例:

導(dǎo)航條背影圖片:bg_nav_bar@2x.png

導(dǎo)航返回按鈕:bg_nav_back_normal@2x.png正勒,bg_nav_back_selected@2x.png

標(biāo)簽item背景:bg_tabbar_record_normal@2x.png,bg_tabbar_record_selected@2x.png

私有模塊命名示例:

以Joggers APP的用戶中心圖片資源為例說明傻铣,

uc——user center

用戶中心頭像默認(rèn)圖:bg_uc_avatar@2x.png

用戶中心頂部默認(rèn)背景圖:bg_uc_top_defaut@2x.png

用戶中心底部背景圖:bg_uc_bottom@2x.png

這部分工作較為繁雜章贞,并且在程序員心中會(huì)認(rèn)為是技術(shù)含量較低的一個(gè)工作,但圖片命名

的嚴(yán)謹(jǐn)性同樣會(huì)反映出我們對(duì)細(xì)節(jié)的追求非洲,細(xì)節(jié)決定成敗阱驾。

文件組織結(jié)構(gòu)

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,可以開辟出公共的文件夾來管理

在實(shí)際中使用中帽借,項(xiàng)目實(shí)際負(fù)責(zé)人可以結(jié)合項(xiàng)目特點(diǎn)靈活使用珠增,但基本的原則一定要保持,保持良好的類文件組織結(jié)構(gòu)砍艾,對(duì)團(tuán)隊(duì)有益無害蒂教。

2. 圖片資源文件組織

圖片資源文件,強(qiáng)烈建議采用Images.xcassets管理脆荷,盡量少用自己創(chuàng)建的文件夾管理凝垛。

使用Images.xcassets的優(yōu)勢(shì)很多,具體可以查閱讀相關(guān)文獻(xiàn)資料蜓谋,這里只從工程管理上說一點(diǎn)梦皮,在Images.xcassets中添加圖片資源,不會(huì)對(duì)project文件造成改變桃焕,而直接在文件夾里添加圖片文件届氢,每次都會(huì)對(duì)project文件造成改變,因此使用Images.xcassets管理圖片資源可以減少project沖突的次數(shù)覆旭。

下圖是Joggers的文件組織結(jié)構(gòu):

上圖嚴(yán)格按照上述討論組織文件結(jié)構(gòu)退子,保持了物理/邏輯結(jié)構(gòu)的統(tǒng)一,方便團(tuán)隊(duì)間查閱代

碼型将,以及共享資源寂祥。

類代碼組織原則

一個(gè)原則:析構(gòu)函數(shù)- (void)dealloc最好放到類最上面,第一眼就可以看到這個(gè)方法七兜,可以方便看到是否remove了一些操作丸凭,對(duì)內(nèi)存的合理釋放等,controller腕铸,view的生命周期函數(shù)放到最上面惜犀,自己實(shí)現(xiàn)的方法在下面,相同/相近功能的方法采用#pragma mark -來標(biāo)記狠裹,以便查看虽界。

示例:

第一部分主要對(duì)易把握的,易推廣的涛菠,并且對(duì)團(tuán)隊(duì)開發(fā)中有實(shí)實(shí)在在幫助內(nèi)容作簡(jiǎn)要論述莉御,主要集中在命名撇吞,文件組織原則方面,并給了相應(yīng)的示例礁叔。規(guī)范由各項(xiàng)目負(fù)責(zé)人具體執(zhí)行牍颈。好像忘記一件什么事,沒錯(cuò)琅关,注釋煮岁,上述沒有對(duì)注釋做專門的闡述,良好的代碼習(xí)慣就是一個(gè)好的注釋涣易,因此這里不專門為注釋作討論画机,注釋要求由各項(xiàng)目負(fù)責(zé)人來約定。

@傅總 團(tuán)隊(duì)要求

iOS代碼規(guī)范

1 刪除多余的空行

* 所有方法與方法之間空1行

* 所有代碼塊之間空1行

2 刪除多余的注釋

* 刪除注釋掉的代碼

* 刪除沒有意義的注釋

3 刪除多余的方法

* 如果方法沒有使用到都毒,請(qǐng)刪除它

* 如果方法沒有執(zhí)行任何業(yè)務(wù)邏輯色罚,請(qǐng)刪除它或者給出一定注釋

4 刪除未被使用的資源文件

5 添加必要的注釋

* 所有 .h 文件中的property 需要給出注釋

* 所有自定義的方法需要給出注釋

* 比較大的代碼塊需要給出注釋

* 所有代碼中出現(xiàn)的阿拉伯?dāng)?shù)字需要給出注釋

* 程序中出現(xiàn)加密/解密 邏輯的操作地方碰缔,需要給出注釋說明過程(無論是系統(tǒng)還是自定義)

6 整體代碼風(fēng)格需要統(tǒng)一

* 代碼后面的”{“ 不需要單獨(dú)占用一行

* 邏輯運(yùn)算符 與 代碼之前空一格

* “#pragma mark -” 與下面的代碼之前不要空行

* 遵循一般性的代碼規(guī)范

iOS通用規(guī)則

1 下面所有規(guī)則對(duì)第三方類庫(kù)無約束

* 所有類账劲、方法、屬性等命名金抡,做到見名知意瀑焦,采用駝峰式命名規(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í)慣來定)梗肝,讓你的代碼變的優(yōu)雅榛瓮!

2. 命名規(guī)范

* 所有類名稱以項(xiàng)目工程開頭命名,eg:“XP”巫击、“ZJG”禀晓、“SZ”

* 針對(duì)不同視圖控制器,在末尾添加后綴坝锰,eg:

* UIViewController? 后綴添加“ViewController”

* UIView 后綴添加“View”

* UIButton 后綴添加“Button"

* UILabel 后綴添加“Label"

3. 單頁(yè)代碼最好控制在800行以內(nèi)粹懒,每個(gè)方法最好不要超過100行,過多建議對(duì)代碼進(jìn)行重構(gòu)

4. 相同的邏輯方法定義避免在多個(gè)地方出現(xiàn)顷级,盡量將公用的類凫乖、方法抽取出來

5. 刪除未被使用的代碼,不要大片注釋未被使用的代碼弓颈,確定代碼不會(huì)使用帽芽,請(qǐng)及時(shí)刪除

6. 對(duì)其他項(xiàng)目中copy過來的代碼,根據(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)行分組 eg:

* #pragma mark - View lifeCycle

* #pragma mark - View lifeTerm

* #pragma mark - Init methods

* #pragma mark - Action methods

* #pragma mark - Common methods

* #pragma mark - UIActionSheetDelegate

* #pragma mark - UIImagePickerControllerDelegate

* #pragma mark - UITableViewDelegate Methods

* #pragma mark - UITableViewDataSource Methods

* #pragma mark - UIScrollViewDelegate Methods

* #pragma mark - UITextFieldDelegate Methods

* #pragma mark - UITextViewDelegate Methods

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末跌捆,一起剝皮案震驚了整個(gè)濱河市徽职,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌佩厚,老刑警劉巖姆钉,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異抄瓦,居然都是意外死亡潮瓶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門钙姊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毯辅,“玉大人,你說我怎么就攤上這事煞额∷伎郑” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵膊毁,是天一觀的道長(zhǎng)胀莹。 經(jīng)常有香客問我,道長(zhǎng)婚温,這世上最難降的妖魔是什么描焰? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮栅螟,結(jié)果婚禮上荆秦,老公的妹妹穿的比我還像新娘。我一直安慰自己力图,他們只是感情好步绸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著搪哪,像睡著了一般靡努。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晓折,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天惑朦,我揣著相機(jī)與錄音,去河邊找鬼漓概。 笑死漾月,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的胃珍。 我是一名探鬼主播梁肿,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蜓陌,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了吩蔑?” 一聲冷哼從身側(cè)響起钮热,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎烛芬,沒想到半個(gè)月后隧期,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赘娄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年仆潮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遣臼。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡性置,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出揍堰,到底是詐尸還是另有隱情鹏浅,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布个榕,位于F島的核電站篡石,受9級(jí)特大地震影響芥喇,放射性物質(zhì)發(fā)生泄漏西采。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一继控、第九天 我趴在偏房一處隱蔽的房頂上張望械馆。 院中可真熱鬧,春花似錦武通、人聲如沸霹崎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)尾菇。三九已至,卻和暖如春囚枪,著一層夾襖步出監(jiān)牢的瞬間派诬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工链沼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留默赂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓括勺,卻偏偏與公主長(zhǎng)得像缆八,于是被迫代替她去往敵國(guó)和親曲掰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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

  • 命名原則 1.基本原則 (1)清晰奈辰。 命名應(yīng)該是以清晰為主栏妖、簡(jiǎn)潔為輔〗鼻。總的來講不要使用單詞的簡(jiǎn)寫底哥,除了使用非常常見...
    MichaelHuyp閱讀 3,206評(píng)論 2 28
  • 【 題注】由于公司正在準(zhǔn)備招新的iOS開發(fā)工程師,到時(shí)有些iOS開發(fā)者參與進(jìn)來房官。這時(shí)如果每個(gè)人的Objecti...
    admxjx閱讀 3,861評(píng)論 0 6
  • 導(dǎo)語(yǔ): 為規(guī)范部門 iOS開發(fā)趾徽,特制定本文檔,供各位同仁參考翰守。 語(yǔ)言 使用US英語(yǔ)孵奶, 不要使用拼音。e.g:UIC...
    攻城獅V閱讀 773評(píng)論 0 0
  • 高原就是海大山是揚(yáng)起的帆我站在下板藏的船頭青春年少,在我身后 深溝處湿颅,祖先與時(shí)間合為一體我的歌聲载绿,越過坡上的牛羊金...
    北書房閱讀 259評(píng)論 0 7
  • 1.ios中數(shù)據(jù)的存儲(chǔ)方式 (1)Plist(NSArray\NSDictionary)(2)Preference...
    王道ob閱讀 930評(píng)論 0 0