代碼規(guī)范

文章內(nèi)容都是在其他博客中東摘西取整理的,如有雷同,請多多見諒>纠歉提!


命名原則

1.一般性原則:可讀性高(簡潔且清晰)和防止命名沖突(通過加前綴后綴來保證)笛坦。  Objective-C 的命名通常都比較長, 名稱遵循駝峰式命名法. 一個好的命名標準很簡單, 就是做到在開發(fā)者一看到名字時, 就能夠懂得它的含義和使用方法. 另外, 每個模塊都要加上自己的前綴, 前綴在編程接口中非常重要, 可以區(qū)分軟件的功能范疇并防止不同文件或者類之間命名發(fā)生沖突, 比如相冊模塊(PhotoGallery)的代碼都以PG作為前綴: PGAlbumViewController

Paste_Image.png

2.一致性盡可能與Cocoa編程接?命名保持一致苔巨。如果你不太確定某個命名的?致性,請瀏覽頭文件或參考文檔中的范例版扩,在使?多態(tài)方法的類中,命名的?致性?常重要。在不同類中實現(xiàn)相同功能的?法應(yīng)該具有同的名稱恋拷。

Paste_Image.png

一资厉、圖片命名

命名規(guī)則的基本思想是把文件名分成三部分:第一部分是圖片的邏輯歸屬分類,第二部分是圖片的表現(xiàn)內(nèi)容蔬顾,第三部分是圖片的內(nèi)容的類型宴偿,有些圖片還會有第四部分湘捎,表示圖片表現(xiàn)的狀態(tài)≌酰基本規(guī)則:

用英文命名窥妇,不用拼音
每一部分用下劃線分隔
圖片名中兩倍圖在名字最后要加@2x,三倍圖在名字最后要加@3x

Paste_Image.png
二娩践、類的命名

類名(以及類別活翩、協(xié)議名)應(yīng)首字母大寫,并以駝峰格式分割單詞翻伺。

1.類的前綴
1)所有類名材泄、枚舉、結(jié)構(gòu)吨岭、protocol定義時最好加一個統(tǒng)一的標示符拉宗,可以是項目縮寫,或者個人項目的名稱縮寫辣辫,例如都加上全大寫的Hoo(我的姓氏)作為前綴
2)根據(jù)功能模塊可以在給功能模塊的類添加功能模塊的名稱前綴旦事,如用戶中心的profileViewController.可以命名為HooUCProfileViewController.
2.類的后綴
所有protocol定義時,都加上后綴Delegate 急灭。如姐浮,HooRefreshViewDelegate,表示RefreshView的協(xié)議葬馋;
所有的控制器都加上Controller,所有的通知名都加上Notification卖鲤。

三、類別命名

類名+標識+擴展(UIImageView +HP+Web)
例:如果我們想要創(chuàng)建一個基于UIImageView 的類別用于網(wǎng)絡(luò)請求圖片点楼,我們應(yīng)該把類別放到名字是UIImageView+HPWeb.h的文件里扫尖。UIImageView為要擴展的類名,HP為專屬標識掠廓,Web為擴展的功能换怖。

四、方法命名

方法名應(yīng)遵守小駝峰原則蟀瞧,首字母小寫沉颂,其他單詞首字母大寫,每個空格分割的名稱以動詞開頭。執(zhí)行性的方法應(yīng)該以動詞開頭悦污,小寫字母開頭铸屉,返回性的方法應(yīng)該以返回的內(nèi)容開頭,但之前不要加get切端。如:

- (void)insertModel:(id)model atIndex:(NSUInteger)atIndex;
- (instancetype)arrayWithArray:(NSArray *)array;

代理方法以發(fā)送代理的對象類名作為代理方法名的開始(去掉類名的前綴彻坛,并且小寫開頭)

- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row;
- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;
五、枚舉的命名

正宗的iOS開發(fā)者當然要以O(shè)bjective-C的方式命名枚舉,如:

typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {
    UIViewAnimationTransitionNone,
    UIViewAnimationTransitionFlipFromLeft,
    UIViewAnimationTransitionFlipFromRight,
    UIViewAnimationTransitionCurlUp,
    UIViewAnimationTransitionCurlDown,
};
六昌屉、屬性钙蒙、變量名命名

變量名使用小駝峰法, 使變量名盡量可以推測其用途,屬性具有描述性间驮。別一心想著少打幾個字母躬厌,讓你的代碼可以迅速被理解更加重要。每個屬性命名都加上類型后綴竞帽,如扛施,按鈕就加上Button后綴,模型就加上Model后綴屹篓。

@property (nonatomic, strong) UIButton *submitButton;

1)類成員變量名
  成員變量用小駝峰法命名并前綴下劃線疙渣,如:

UIButton *_submitButton;

2)局部變量名  遵守小駝峰命名規(guī)則,如:

NSInteger numCompletedConnections =3;
七抱虐、const 常量

以小寫k開頭昌阿,后面單詞首字母大寫饥脑,其余小寫恳邀。如:

const float kMaxHeigt = 100.0f;

如果是特殊含義的常量也建議加上后綴,如通知加上Notification為后綴灶轰,如:

extern Nsstring * Const kLoginSuccessNotification

======================20170122補充======================

命名的三個原則:表現(xiàn)力谣沸、清晰、無歧義

Tip1:什么時候需要在聲明變量的時候指明類型笋颤?

原則是,如果在現(xiàn)實世界中顯而易見的乳附,并且不容易產(chǎn)生歧義的,我們不需要聲明類型。

NSString       * accountName;
NSMutableArray * mailboxes;
NSArray        * defaultHeaders;
BOOL             isOpen;

凡是容易產(chǎn)生歧義的伴澄,必須指明類型赋除。

UIImage        *avatarImage;  
UIImageView    *avatarImageView;  
NSURL          *avatarURL;
Tip2:帶有返回值的方法我們應(yīng)當如何命名?

規(guī)則如下非凌。

[object/class thing+condition];
[object/class thing+input:input];
[object/class thing+identifer:input];
realPath    = [path     stringByExpandingTildeInPath];
fullString  = [string   stringByAppendingString:@"Extra Text"];
object      = [array    objectAtIndex:3];

上述的三個句子string + ByExpandingTildeInPath,string規(guī)定了返回值的類型举农,也就是thing, ByExpandingTildeInPath規(guī)定了條件。

Tip3:如何避免歧義敞嗡?
- (void)sortInfo
- (void)refreshTimer
- (void)update
- (void)fetchInfo:

sortInfo 你究竟是想對Info這個東西進行排序呢?還是想返回排序信息颁糟?
refreshTimer 究竟是想返回一個刷新時間還是執(zhí)行一個刷新操作?
update 想更新什么喉悴?
fetchInfo 是想執(zhí)行獲取信息的操作還是返回fetch的信息棱貌?
如何更改?

- (void)currentSortInfo        
- (void)refreshDefaultTimer   
- (void)updateMenuItemTitle   
- (void)infoForFetch:

current作為形容詞指明了sortInfo是一個名詞,所以很明顯是返回當前的排序信息箕肃。
有了Default那么refresh理所當然的是一個動詞,用來表明這是一次刷新操作
指明了需要更新的對象
指明了info的意思,是關(guān)于Fetch操作的婚脱。

案例一:變量的命名
//材料 UILabel* shicaiLB; // UIImageView* foodImageV; /*步驟*/ //圖標 // UIImageView * imageTB; UILabel * setpLB; //橫線 UIView * lineV; //步驟簡介 UITextView * textLb; //圖片 // UIImageView * imageView; UIImageView * imageEND; //小貼士 UITextView * stsLb;

上面的命名幾乎全部違反了命名的第二條準則。Clear.
第一行注釋寫的是材料。UILabel* shicaiLB
如果是食物的材料障贸,那么實際上應(yīng)該是 ingredient 這個單詞涡贱。LB 這個縮寫我估計是 label 的意思。那么實際上正確的命名應(yīng)該是UILabel *ingredientLabel

第二條,步驟惹想。 UILabel *setpLB
 问词,基本的拼寫錯誤。步驟 = step那么正確寫法應(yīng)該是: stepLabel
 .實際上這樣寫還是有問題的嘀粱,到底是什么東西的步驟激挪。前面應(yīng)當繼續(xù)加一個形容詞。比如cookingStepLabel
.

第三條锋叨,橫線垄分。這個注釋首先有問題。
橫線到底是 cell 的分割線?還是 view 和 view 之間的分割線?這個分割線到底有什么特點?作用是什么?
我們完全無法從命名中獲知.

第四條,步驟簡介.UITextView *textLB
.這個完全不知道在寫什么.按照注釋的意思,應(yīng)該是stepSummaryTextView
.

第五條,注釋是圖片......我在后續(xù)代碼中發(fā)現(xiàn)這個變量并沒有被用到.

第六條, 小貼士. UITextView * stsLb;
 按照他之前的命名邏輯, LB應(yīng)該是等同于Label的意思,那么這時候又用LB作為限定詞給TextView命名,上下邏輯混亂.錯上加錯了.推薦cookingTipsTextView
.```

######案例二:代理方法的命名

//點擊scrollView中的圖片點擊事件協(xié)議@protocol ValueClickDelegate <NSObject>-(void)ADbuttonClick:(NSInteger)vid;@end

代理方法有著非常嚴格的命名規(guī)范.
要以發(fā)出信息的類命作為開始.例如

  • (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row;

是以tableView作為開頭的.因為這個代理方法是由tableView發(fā)出的.
如果代理方法的參數(shù)只有一個并且是發(fā)出者本身.那么需要指明代理方法的意圖.例如

  • (BOOL)applicationOpenUntitledFile:(NSApplication *)sender;

用 did
或者 will
用來說明事件發(fā)生的狀態(tài),例如

  • (void)browserDidScroll:(NSBrowser *)sender;

上述這個代理方法主要是為了響應(yīng)點擊圖片之后的行為.所以應(yīng)當寫為.

  • (void)scrollView:(AOScrollerView *)scrollView adButtonDidClick:(UIButton *)button;

######案例三:圖片資源的命名
![](http://upload-images.jianshu.io/upload_images/1923392-fdf0988dbd005263.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

圖片文件的命名通用的方法有兩種娃磺。
與聲明變量類似薄湿,都采用駝峰命名法。
全部小寫偷卧,單詞與單詞之間采用_
鏈接豺瘤。 .e.g.login_button_icon
.

我比較建議第二種,因為如果采用第一種有時候會與變量名混淆听诸。
那么坐求,按照第二種命名方式。這三張圖片資源的命名應(yīng)該是晌梨。
homepage_topright_pop_4;
homepage_topright_pop_5;
homepage_topright_pop_6


#######案例四:方法的命名

方法命名的原則:命名需要清楚的指明方法的用途桥嗤,參數(shù)的意義。
我們常常碰到一個方法含有多個參數(shù)的情況仔蝌,如何鏈接這些參數(shù)呢泛领?
如果方法的參數(shù)都是 receiver 的屬性,那么參數(shù)之間的鏈接不可以使用 and

  • (int)runModalForDirectory:(NSString *)path file:(NSString *) name types:(NSArray *)fileTypes;

錯誤的做法敛惊。

  • (int)runModalForDirectory:(NSString *)path andFile:(NSString *)name andTypes:(NSArray *)fileTypes;

如果你的方法里的參數(shù)來自截然不同的行為渊鞋,那么可以用 and
活著 with
來鏈接。

  • (BOOL)openFile:(NSString *)fullPath withApplication:(NSString *)appName andDeactivate:(BOOL)flag;

看看案例
//創(chuàng)建目錄文件夾+(NSString *)CreateList:(NSString *)List ListName:(NSString *)Name;//寫入NsArray文件+(BOOL)WriteFileArray:(NSArray *)ArrarObject SpecifiedFile:(NSString *)path;

首字母應(yīng)當小寫豆混。改完之后是

(NSString *)createList:(NSString *)list listName:(NSString *)name;

createList 和后面的第二個參數(shù) listName 篓像,兩個參數(shù)都含有l(wèi)ist這個名字,那么到底哪個參數(shù)才是list的名字皿伺?
經(jīng)過我看.m文件的實現(xiàn)员辩,才知道,第一個list是上一級目錄的名字鸵鸥,而第二個參數(shù)才是真正的listName奠滑,那么需要把方法改成丹皱。+ (NSString *)createList:(NSString *)listName parentDirectory:(NSString *)directoryName;


參考文章:
[jackiehoo ](http://www.reibang.com/users/902105722a5a)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宋税,隨后出現(xiàn)的幾起案子摊崭,更是在濱河造成了極大的恐慌,老刑警劉巖杰赛,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呢簸,死亡現(xiàn)場離奇詭異,居然都是意外死亡乏屯,警方通過查閱死者的電腦和手機根时,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辰晕,“玉大人蛤迎,你說我怎么就攤上這事『眩” “怎么了替裆?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長窘问。 經(jīng)常有香客問我辆童,道長,這世上最難降的妖魔是什么南缓? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任胸遇,我火速辦了婚禮,結(jié)果婚禮上汉形,老公的妹妹穿的比我還像新娘。我一直安慰自己倍阐,他們只是感情好概疆,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著峰搪,像睡著了一般岔冀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上概耻,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天使套,我揣著相機與錄音,去河邊找鬼鞠柄。 笑死侦高,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的厌杜。 我是一名探鬼主播奉呛,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼计螺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瞧壮?” 一聲冷哼從身側(cè)響起登馒,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咆槽,沒想到半個月后陈轿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡秦忿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年济欢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片小渊。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡法褥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出酬屉,到底是詐尸還是另有隱情半等,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布呐萨,位于F島的核電站杀饵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谬擦。R本人自食惡果不足惜切距,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惨远。 院中可真熱鬧谜悟,春花似錦、人聲如沸北秽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贺氓。三九已至蔚叨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辙培,已是汗流浹背蔑水。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扬蕊,地道東北人搀别。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像厨相,于是被迫代替她去往敵國和親领曼。 傳聞我的和親對象是個殘疾皇子鸥鹉,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

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