正文:經過讀寫大量代碼我有本身的一套編程思路和習慣,自認爲本身的編碼習慣仍是不錯的,代碼結構也算清晰,由於我一直以來都是代碼看的多寫的多,可是總結的比較少,知識常常不成體系。之後多花點時間把本身的經驗和學習知識加以總結一下吧,這樣有利於去指導新人,也更有利於加深本身的知識認知。今天就從代碼規範入手總結一下iOS開發中好的編碼規範吧。咱們在開發中看別人的代碼的時候常常會去抱怨至少心裏裏罵娘,其實別人看你的代碼也許也在抱怨你,我更深入的意識到:高手和新手有代碼規範水平的差別,高手與高手之間有變成思想的差別,新手之間就在模仿中就更加凌亂了。所以團隊開發必定要有很好的且統一的編碼規範,這樣纔有利於團隊開發與快速維護。今天先寫第一篇:《iOS開發(OC)中的命名規範》html
1.通常性原則:可讀性高(簡潔且清晰)和防止命名衝突(經過加前綴來保證)。編程
Objective-C 的命名一般都比較長, 名稱遵循駝峯式命名法. 一個好的命名標準很簡單, 就是作到在開發者一看到名字時, 就可以懂得它的含義和使用方法. 另外, 每一個模塊都要加上本身的前綴, 前綴在編程接口中很是重要, 能夠區分軟件的功能範疇並防止不一樣文件或者類之間命名發生衝突, 好比相冊模塊(PhotoGallery)的代碼都以PG做爲前綴: PGAlbumViewController, PGDataManager.網絡
代碼app |
點評post |
insertObject:atIndex:學習 |
Good編碼 |
insert:at:atom |
不清晰;要插⼊什麼?「at」表⽰示什麼?url |
removeObjectAtIndex:spa |
Good |
removeObject: |
不錯,由於⽅法是⽤用來移除做爲參數的對象 |
remove: |
不清晰;要移除什麼? |
2.一致性
儘量與Cocoa
編程接⼝命名保持一致。若是你不太肯定某個命名的⼀致性,請瀏覽頭文件或參考文檔中的範例,在使⽤多態方法的類中,命名的⼀致性⾮常重要。在不一樣類中實現相同功能的⽅法應該具備同的名稱。
代碼 | 點評 |
---|---|
– (NSInteger)tag | 在 NSView, NSCell, NSControl 中有定義 |
– (void)setStringValue:(NSString *) | 在許多 Cocoa classes 中都有定義 |
文件的命名
文件的擴展名應該以下:
.h |
C/C++/Objective-C 的頭文件 |
.m |
Ojbective-C 實現文件 |
.mm |
Ojbective-C++ 的實現文件 |
.cc |
純 C++ 的實現文件 |
.c |
純 C 的實現文件 |
類別的文件名應該包含被擴展的類名,如:GTMNSString+Utils.h
或``GTMNSTextView+Autocomplete.h``。
類的命名
類名(以及類別、協議名)應首字母大寫,並以駝峯格式分割單詞。
1.類的前綴
1)全部類名、枚舉、結構、protocol定義時最好加一個統一的標示符,能夠是項目縮寫,或者我的項目的名稱縮寫,例如都加上全大寫的Hoo(個人姓氏)做爲前綴
2)根據功能模塊能夠在給功能模塊的類添加功能模塊的名稱前綴,如用戶中心的profileViewController.能夠命名爲HooUCProfileViewController.
2.類的後綴
全部protocol定義時,都加上後綴Delegate 。如,HooRefreshViewDelegate,表示RefreshView的協議;
全部的控制器都加上Controller,全部的通知名都加上Notification。
類別命名
類名+標識+擴展(UIImageView +HP+Web)
例:若是咱們想要建立一個基於UIImageView 的類別用於網絡請求圖片,咱們應該把類別放到名字是UIImageView+HPWeb.h的文件裏。UIImageView爲要擴展的類名,HP爲專屬標識,Web爲擴展的功能。
方法命名
方法名應遵照小駝峯原則,首字母小寫,其餘單詞首字母大寫,每一個空格分割的名稱以動詞開頭。執行性的方法應該以動詞開頭,小寫字母開頭,返回性的方法應該以返回的內容開頭,但以前不要加get。
如:
1
2
3
|
- (
void
)insertModel:(id)model atIndex:(NSUInteger)atIndex;
- (instancetype)arrayWithArray:(NSArray *)array;
|
正宗的iOS開發者固然要以Objective-C的方式命名枚舉,如:
1
2
3
4
5
6
7
|
typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {
UIViewAnimationTransitionNone,
UIViewAnimationTransitionFlipFromLeft,
UIViewAnimationTransitionFlipFromRight,
UIViewAnimationTransitionCurlUp,
UIViewAnimationTransitionCurlDown,
};
|
變量名使用小駝峯法, 使變量名儘可能能夠推測其用途屬性具備描述性。別一心想着少打幾個字母,讓你的代碼能夠迅速被理解更加劇要。每一個屬性命名都加上類型後綴,如,按鈕就加上Button
後綴,模型就加上Model
後綴。
@property (nonatomic, strong) UIButton *submitButton;
1)類成員變量名
成員變量用小駝峯法命名並前綴下劃線,如:UIButton *_submitButton;
2)局部變量名
遵照小駝峯命名規則,如:NSInteger numCompletedConnections =3;
以小寫k
開頭,後面單詞首字母大寫,其他小寫。如:
const float kMaxHeigt = 100.0f;
若是是特殊含義的常量也建議加上後綴,如通知加上Notification爲後綴,如:
extern Nsstring * Const kLoginSuccessNotification
資源文件命名 (圖片,本地化文件)
這個圖片資源命名方式,以功能爲組織形式,是一個很好的習慣,有利於查看資源文件。
原則:
1)採用單詞全拼,或者你們公認無岐義的縮寫(好比:nav,bg,btn等)
2)採用「模塊+功能」命名法,模塊分爲公共模塊、私有模塊。公共模塊主要包括統一的背景,導航條,標籤,公共的按鈕背景,公共的默認圖等等;私有模塊主要根據app的業務功能模塊劃分,好比用戶中心,消息中心等。
例如用戶中心用戶頭像圖片的命名能夠爲:uc_imageview_user_icon