IOS編碼規(guī)范

命名

Bundle id命名:

規(guī)則:采用反域名命名規(guī)則届吁,全部使用小寫(xiě)字母褒傅。一級(jí)包名為com历涝,二級(jí)包名根據(jù)應(yīng)用進(jìn)行命名榕酒。

類(lèi)命名:

類(lèi)命采取駝峰命名規(guī)則报辱,即首字母必須大寫(xiě)瑞眼,如果為詞組吗铐,則每個(gè)單詞的首字母必須大寫(xiě)息楔,類(lèi)名只能使用名詞或名詞詞組妒峦;并以項(xiàng)目工程開(kāi)頭命名重斑,力求類(lèi)名簡(jiǎn)單 。

繼承自UIView的類(lèi)以View結(jié)尾肯骇。

繼承自ViewController的類(lèi)以ViewController 結(jié)尾窥浪。

保存數(shù)據(jù)的實(shí)體以Model結(jié)尾。

方法的命名:

規(guī)則:方法名第一個(gè)單詞是一個(gè)動(dòng)詞笛丙,其首字母小寫(xiě)漾脂,其后的所有單詞首字母大寫(xiě)。

如:- (void) addNotification{}

類(lèi)中常用方法命名

類(lèi)的獲取方法

如果返回值為單個(gè)值胚鸯,一般在頭部加上單詞“get”骨稿。如果返回值是數(shù)組或列表,要在頭部加單詞“find”

如:- (NSString*)getUserName{}姜钳、- (NSArray*)findFriends{}

類(lèi)的設(shè)置方法

在被訪(fǎng)問(wèn)字段名的前面加上前綴 set

如:- (void)setName:(NSString *)name{}

類(lèi)的布爾型判斷方法

一般要求方法名使用單詞 is或has 做前綴

如:isNetWorkConnected()

構(gòu)造方法應(yīng)該用遞增的方式寫(xiě)坦冠。

參數(shù)個(gè)數(shù)少的在前

變量命名

規(guī)則:第一個(gè)單詞首字母必須小寫(xiě),往后的單詞需要符合駝峰命名規(guī)則哥桥,即第一個(gè)字母大寫(xiě)辙浑。變量名盡可能的使用名詞或名詞詞組。同樣要求簡(jiǎn)單易懂拟糕,不允許出現(xiàn)無(wú)意義的單詞判呕。

如:String *userName

其他命名規(guī)則


實(shí)例變量命名

加前綴“_”

控件變量命名

規(guī)則:一般的變量命名后加上控件名稱(chēng)

IBOutlet UILabel *userNameLabel;

常量命名:

規(guī)則:必須全部大寫(xiě),單詞間用下劃線(xiàn)隔開(kāi)送滞。

如:MAP_KEY

異常命名:

規(guī)則:自定義異常首字母大寫(xiě)侠草,以 Exception 為結(jié)尾。

如:AppException

資源命名:

項(xiàng)目中所使用的所有資源命名必須以全部單詞小寫(xiě)犁嗅,單詞間以下劃線(xiàn)分割梦抢,加前綴區(qū)分。

原則:

1)采用單詞全拼愧哟,或者大家公認(rèn)無(wú)岐義的縮寫(xiě)(比如:nav奥吩,bg,btn等)

2)采用“模塊+功能”命名法蕊梧,模塊分為公共模塊霞赫、私有模塊。公共模塊主要包括統(tǒng)一的背景肥矢,導(dǎo)航條端衰,標(biāo)簽叠洗,公共的按鈕背景,公共的默認(rèn)圖等等旅东;私有模塊主要根據(jù)app的業(yè)務(wù)

功能模塊劃分灭抑,比如用戶(hù)中心,消息中心等

btn_xx_normal ? ? ? ? ?按鈕正常情況下的效果

btn_xx_press ? ? ? ? ? ? 按鈕點(diǎn)擊下的效果?

bg_head? ? ? ? ? ? ? ? ? ? 背景圖片使用bg_功能_說(shuō)明

def_search_cell? ? ? ? ? 默認(rèn)圖片使用def_功能_說(shuō)明

icon_more_help ? ? ? ? 圖標(biāo)圖片使用icon_功能_說(shuō)明

seg_list_line? ? ? ? ? ? ? 具有分割特征的圖片使用seg_功能_說(shuō)明

sel_ok? ? ? ? ? ? ? ? ? ? ? ? 選擇圖標(biāo)使用sel_功能_說(shuō)明


代碼風(fēng)格

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

Import

Import語(yǔ)句引入的次序如下:

IOS imports

第三方庫(kù)

自定義.h文件

在每組內(nèi)部按字母排序抵代,大寫(xiě)字母排在小寫(xiě)字母的前面腾节。每個(gè)大組之間應(yīng)該空一行。

空格

1. 關(guān)鍵字與其后的表達(dá)式之間需要加空格荤牍。

2. 單目操作符不應(yīng)與操作數(shù)分開(kāi)案腺。

3. 除’,’外,其它雙目操作符應(yīng)與它們的操作數(shù)用空格隔開(kāi)康吵。

4. 在.h中協(xié)議<>前面有一個(gè)空格劈榨。

5. 在.h中成員聲明時(shí),類(lèi)型與變量之間有至少1個(gè)空格晦嵌。*號(hào)靠近變量同辣,不靠近類(lèi)型。

6. @property后留1個(gè)空格惭载,()里面邑闺,逗號(hào)緊跟前一變量,與后一變量之間留1 個(gè)空格棕兼。()外面陡舅,先留1個(gè)空格,再聲明屬性伴挚。

7. 方法的+靶衍,-后面與()。

8. 返回類(lèi)型與*之間留1個(gè)空格茎芋,方法參數(shù)中返回類(lèi)型與*之間留1個(gè)空格

9. 在多參數(shù)方法中颅眶,每個(gè)參數(shù)后面都有1個(gè)空格。

10. Switch..case 語(yǔ)句田弥,代碼塊需要留4個(gè)空格涛酗。

11. If語(yǔ)句嵌套,內(nèi)部if語(yǔ)句需要留4個(gè)空格偷厦。

.h文件空行

以下情況要空行:

1. 頭文件包含(#import)與@class之間

2. @interface與@class之間

3. 頭文件{}內(nèi)商叹,空1行開(kāi)始寫(xiě)成員對(duì)象。

4. 頭文件{}外只泼,空1行開(kāi)始寫(xiě)屬性剖笙。

5. 屬性與方法之間。

6. 如果需要聲明protocol请唱,空2行接著寫(xiě)弥咪。通常protocol寫(xiě)在@end后面过蹂,但是聲明在@interface之前。

7. 方法與方法之間空1行聚至。

8. 方法與@end之間酷勺。

.m文件空行

1. 文件說(shuō)明與頭文件包含(#import)之間。

2. 頭文件包含(#import)之間扳躬。

3. @implementation和@synthesize之間脆诉。

4. @synthesize與方法之間。

5. 變量聲明后需要空1行坦报。

6. 各功能塊之間。

7. #pragma mark 與方法之間狂鞋。

Log

規(guī)則:統(tǒng)一使用自定的log服務(wù)片择,不直接使用系統(tǒng)自帶。

語(yǔ)句

每行只能有一個(gè)語(yǔ)句

每行代碼最多不得操作100個(gè)字符骚揍。

控制語(yǔ)句

If語(yǔ)句

判斷中如果有常量字管,則應(yīng)將常量放在判斷式的右側(cè),如if (a > b)

如:if (index > 0) …… //單條語(yǔ)句,放在if同一行

if (index > 0){ //多行語(yǔ)句

……….

}

While語(yǔ)句

循環(huán)語(yǔ)句中不允許出現(xiàn)表達(dá)式信不。

如while(I < documents.getCount())

盡可能保證.h文件的簡(jiǎn)介性嘲叔,可以不公開(kāi)的API就不要公開(kāi),寫(xiě)在實(shí)現(xiàn)文件中即可

注釋


頭文件注釋?zhuān)?/b>

所有的源文件都應(yīng)該在開(kāi)頭有一個(gè)注釋?zhuān)渲辛谐鲱^文件的相關(guān)描述抽活、作者硫戈、以及對(duì)應(yīng)的版本信息。

/*!

@header 頭文件名稱(chēng)

@abstract 關(guān)于這個(gè)源代碼文件的一些基本描述

@author作者

@version 1.00 2012/01/20 Creation (此文檔的版本信息:版本號(hào)+創(chuàng)建時(shí)間)

*/

類(lèi)注釋

每一個(gè)類(lèi)都要包含如下格式的注釋?zhuān)哉f(shuō)明當(dāng)前類(lèi)的功能等下硕。

/*!

@class類(lèi)名

@abstract 這里可以寫(xiě)關(guān)于這個(gè)類(lèi)的一些描述丁逝。

*/

枚舉注釋

每一個(gè)枚舉都需要包含相對(duì)應(yīng)的enum描述,以及每個(gè)枚舉值對(duì)應(yīng)的含義梭姓。

/*!

@enum枚舉名稱(chēng)

@abstract 關(guān)于這個(gè)enum的一些基本信息

@constant 各個(gè)對(duì)應(yīng)值得含義霜幼,如: OKButton 對(duì)應(yīng)的是OK按鈕的Tag

*/

typedef NS_ENUM (NSInteger,RunGoalTypeE){

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

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

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

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

};

協(xié)議注釋

協(xié)議需要注明是哪個(gè)類(lèi)對(duì)應(yīng)的protocol,以及自身的相關(guān)描述誉尖。

/*!

@protocol 協(xié)議名稱(chēng)

@abstract 這是哪個(gè)類(lèi)的protocol

@discussion 具體描述信息

*/

方法注釋

包括當(dāng)前方法的用途罪既,當(dāng)前方法參數(shù)的含義,當(dāng)前方法返回值的內(nèi)容和對(duì)應(yīng)的錯(cuò)誤參照铡恕。

/*!

@method 方法名

@abstract該方法的一些簡(jiǎn)要描述

@discussion該方法的具體使用方式琢感,需要注意的地方,如果你是設(shè)計(jì)一個(gè)抽象類(lèi)或者一個(gè)共通類(lèi)給給其他類(lèi)繼承的話(huà)探熔,在這里需要具體描述一下怎樣使用這個(gè)方法猩谊。

@param text參數(shù)列表

@param error 錯(cuò)誤參照

@result 返回結(jié)果

*/

屬性注釋

/*!

@property 屬性名稱(chēng)

@abstract 該P(yáng)roperty的一些基本描述。

*/

類(lèi)別注釋

/*!

@category 類(lèi)別名稱(chēng)

@abstract 哪個(gè)類(lèi)的類(lèi)別

*/


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

1. 類(lèi)文件組織

建議邏輯結(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前端界面比如用戶(hù)中心撤防,消息中心虽风,它們的專(zhuān)有的controller,view等應(yīng)該在屬于文件夾寄月。還會(huì)遇到一些公共的view辜膝,可以開(kāi)辟出公共的文件夾來(lái)管理

在實(shí)際中使用中, 可以結(jié)合項(xiàng)目特點(diǎn)靈活使用漾肮,但基本的原則一定要保持厂抖,保持良好的類(lèi)文件組織結(jié)構(gòu),對(duì)團(tuán)隊(duì)有益無(wú)害克懊。

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ù)。

2. 類(lèi)代碼組織

一個(gè)原則:析構(gòu)函數(shù)- (void)dealloc最好放到類(lèi)最上面旅挤,第一眼就可以看到這個(gè)方法踢关,可以方便看到是否remove了。一些操作粘茄,對(duì)內(nèi)存的合理釋放等签舞,controller,view的生命周期函數(shù)放到最上面柒瓣,自己實(shí)現(xiàn)的方法在下面儒搭,相同/相近功能的方法采用#pragma mark -來(lái)標(biāo)記,以便查看芙贫。

修改規(guī)范

新增代碼行

新增代碼行的前后應(yīng)有注釋行說(shuō)明搂鲫。

//修改人,修改時(shí)間磺平,修改說(shuō)明

新增代碼行

//修改結(jié)束

刪除代碼行

刪除代碼向的前后用注釋行說(shuō)明

//修改人魂仍,修改時(shí)間拐辽,修改說(shuō)明

要?jiǎng)h除的代碼行(將要?jiǎng)h除的語(yǔ)句進(jìn)行注釋)

//修改結(jié)束

修改代碼行

修改代碼行以注釋舊代碼行后再新增代碼行的方式進(jìn)行。

//修改人擦酌,修改時(shí)間俱诸,修改說(shuō)明

//修改前代碼行開(kāi)始

//修改前代碼行

//修改前代碼行結(jié)束

//修改后代碼行開(kāi)始

修改后代碼行

//修改結(jié)束

避免出現(xiàn)的情況

永遠(yuǎn)不要有空的catch語(yǔ)句。替代方案:向方法的調(diào)用者拋出異常赊舶、或者抽象級(jí)別拋出新異常睁搭。

避免在一條語(yǔ)句中給多個(gè)變量賦相同的值

不要將賦值運(yùn)算符用在與相等運(yùn)算符混淆的地方

重復(fù)代碼,復(fù)制-粘貼

長(zhǎng)方法笼平,將所有邏輯處理放在一個(gè)方法里面园骆,每個(gè)方法都應(yīng)有其自己的意圖

大類(lèi),妄想將所有模塊放在一個(gè)類(lèi)中實(shí)現(xiàn)寓调。

小類(lèi)锌唾,一個(gè)類(lèi)所承擔(dān)的責(zé)任太少,應(yīng)該將其消除捶牢,類(lèi)的維護(hù)需要額外的開(kāi)銷(xiāo)


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸠珠,一起剝皮案震驚了整個(gè)濱河市巍耗,隨后出現(xiàn)的幾起案子秋麸,更是在濱河造成了極大的恐慌,老刑警劉巖炬太,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灸蟆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡亲族,警方通過(guò)查閱死者的電腦和手機(jī)炒考,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)霎迫,“玉大人斋枢,你說(shuō)我怎么就攤上這事≈” “怎么了瓤帚?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)涩赢。 經(jīng)常有香客問(wèn)我戈次,道長(zhǎng),這世上最難降的妖魔是什么筒扒? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任怯邪,我火速辦了婚禮,結(jié)果婚禮上花墩,老公的妹妹穿的比我還像新娘悬秉。我一直安慰自己澄步,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布搂捧。 她就那樣靜靜地躺著驮俗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪允跑。 梳的紋絲不亂的頭發(fā)上王凑,一...
    開(kāi)封第一講書(shū)人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音聋丝,去河邊找鬼索烹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛弱睦,可吹牛的內(nèi)容都是我干的百姓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼况木,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼垒拢!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起火惊,我...
    開(kāi)封第一講書(shū)人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤求类,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后屹耐,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體尸疆,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年惶岭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寿弱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡按灶,死狀恐怖症革,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鸯旁,我是刑警寧澤噪矛,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站羡亩,受9級(jí)特大地震影響摩疑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜畏铆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一雷袋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦楷怒、人聲如沸蛋勺。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抱完。三九已至,卻和暖如春刃泡,著一層夾襖步出監(jiān)牢的瞬間巧娱,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工烘贴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留禁添,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓桨踪,卻偏偏與公主長(zhǎng)得像老翘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锻离,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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

  • 注釋規(guī)范 文件頭注釋 文件頭注釋采用如下格式铺峭,該注釋由xcode自動(dòng)生成。如果你對(duì)其他人的原始代碼作出重大的修改汽纠,...
    yangzming閱讀 724評(píng)論 0 1
  • 以下所有純屬個(gè)人習(xí)慣卫键,不喜勿噴 語(yǔ)言:應(yīng)該使用美國(guó)英語(yǔ)命名 如 UIColor *myColor = [UICol...
    夾娃娃達(dá)人閱讀 297評(píng)論 0 0
  • Object-C 開(kāi)發(fā)代碼規(guī)范概要Object-C是一門(mén)面向?qū)ο蟮膭?dòng)態(tài)編程語(yǔ)言,主要用于編寫(xiě)IOS和MAC應(yīng)用程序...
    克魯?shù)吕?/span>閱讀 530評(píng)論 0 1
  • 面試被問(wèn)到公司編碼規(guī)范問(wèn)題疏虫,感覺(jué)有很多東西永罚,但是不知道該怎么說(shuō)出來(lái)啤呼,今天突然找到 李明杰 老師的一份編碼規(guī)范卧秘。重新...
    Dombo_Y閱讀 961評(píng)論 1 2
  • 遇見(jiàn)你之前翅敌,她不相信一見(jiàn)鐘情,遇見(jiàn)你之后惕蹄,她滿(mǎn)心歡喜蚯涮,眉梢眼角露笑意。 周瑩被養(yǎng)父賣(mài)到沈家當(dāng)丫鬟卖陵,一開(kāi)始她受到沈家...
    南湘紫閱讀 1,357評(píng)論 51 51