【1】編程
任意函數長度不得超過50行。(其實很容易就超過50行,這就要考慮代碼抽取了。)數組
【2】app
任意行代碼不能超過80字符。(其實也很容易超過80字符,能夠考慮多行顯示,好比有多個參數時,能夠每一個參數放一行。)能夠在Xcode中設置超過80個字符的提醒,選中「Page guide at column」.設置完以後就會在代碼80個字符處有一條豎線。ide
【3】在每一個方法的定義前留白一行,也就是在方法和方法之間留空一行。函數
【4】功能相近的方法要放在一塊兒,並推薦使用#pragma mark - ***來導航代碼,切分代碼塊。這樣能夠方便函數的查找。而且可使用快捷鍵control+6 來快速查找方法的位置。佈局
【5】二元運算符和參數之間要有一個空格,如賦值號=左右各留一個空格。ui
[objc] view plain copy編碼
self.myString = @"235423rew523452345"; .net
【6】一元運算符和參數之間不放置空格,好比!非運算符,&按位與,|按位或。
[objc] view plain copy
BOOL isOpen = true;
BOOL isClose = !isOpen;
【7】強制類型轉換和參數之間不放置空格。
[objc] view plain copy
NSString *str3 = (NSString*)self.myString;
【8】長的變量值應該拆分爲多行。尤爲體如今使用數組或者字典。如下也分別是快速聲明數組@[]和字典@{}的方法。
[objc] view plain copy
NSArray *array = @[ @"111",
@"2222222222",
@"3333333",
@"wwwwwwwwwwww"
];
[objc] view plain copy
NSDictionary *dict = @{@"name":@"jack",
@"age":@"20",
@"gender":@"female",
@"isMarried":@"false"
};
【9】儘可能使用有意義的名字命名,拒絕使用i,j等無心義字符命名。類的命名首字母大寫,其餘變量的命名首字符小寫,並使用駝峯式分割單詞。
【10】儘可能減小在代碼中直接使用數字常量,而使用宏定義等方式。如:MAX_NUMBER_PHONE替代8等等。這樣咱們搜索也比較方便。
【11】儘可能減小代碼中的重複計算,好比代碼中多處要使用屏幕寬度,而後計算:[[UIScreenmainScreen] bounds].size.width ,不少次,閒得很繁瑣,代碼也冗長。不如直接宏定義:
[objc] view plain copy
#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
【12】合理使用約定俗成的縮略詞:
alloc:分配;
alt:輪流,交替;
app:應用程序;
calc:計算;
dealloc:銷燬、析構;
func:函數、方法;
horiz:水平的;
info:信息;
init:初始化;
max:最大的;
min:最小的;
msg:消息;
nib:Interface Builder;
rect:矩形;
temp:暫時的;
vert:垂直的;
【13】宏定義所有字母大寫。
【14】函數長度不要超過50行,小函數比大函數可讀性更強。函數的參數不宜過多,零元函數最好,一元函數也不錯,高於三元的函數虛重構。
【15】合理範圍內使用鏈式編程:
[objc] view plain copy
NSString *myName = [[NSString alloc] init];
可是嵌套不宜超過3層,超過3層需進行重構。
【16】函數調用時全部參數在同一行。若是參數過多,則能夠每行一個參數,每一個參數以冒號對齊。
【17】對傳入參數的保護或者說是否爲空的判斷,儘可能不要使用if(!obj),而使用NSAssert斷言來處理。NSAssert是系統定義的宏。
[objc] view plain copy
NSAssert(myName != nil, @"myName參數爲空");
若是條件判斷爲真,則程序繼續執行;
若是判斷條件爲假,則拋出異常,異常內容爲後面定義的字符串;
【18】方法參數名前通常使用"an","the","new"來進行修飾。如:
[objc] view plain copy
-(void)setPersonInfo:(NSString*)theID theName:(NSString*)theName theAge:(NSInteger*)theAge
【19】if-else超過四層的時候,就要考慮重構,多層的if-else結構很難維護。
【20】當須要必定條件才執行某項操做時,最左邊的應該是最重要的代碼,不要將最重要的代碼內嵌到if中。
如良好的風格是:
[objc] view plain copy
- (void) someMethod {
if(![someOther boolValue]) {
return;
}
//最重要的代碼寫在這裏;
}
反面教材:
[objc] view plain copy
- (void) someMethod {
if([someOther boolValue]) {
//重要代碼;
}
}
【21】全部的邏輯塊都使用{}花括號包圍,就算只是一行代碼。
【22】明確指定構造函數,並有適當的註釋。
【23】不要在init方法中把變量或者說屬性初始化爲0或者nil,由於沒有必要。
【24】UIView的子類初始化的時候,不要進行任何的佈局操做。佈局操做應該在layoutSubviews裏面作;須要從新佈局的時候調用setNeedsLayout,而不要直接調用layoutSubviews。
【25】保持公共API簡單,也就是保持.h文件簡單。放在.h中聲明的函數都是會被公開的,若是根本就不必對其餘類公開,再不要在.h中聲明。OC中的方法都是公有方法,沒有私有方法一說。
【26】一個文件只實現一個類。同一個文件中不要有多個類。
【27】Protocol單獨用一個文件來建立,儘可能不要與相關類混在一個文件中。
【28】在類定義中使用到本身定義類的時候,儘可能不要在頭文件中引入本身定義類的頭文件,使用@class替代。而在實現文件中引入頭文件。
【29】佈局時儘可能使用相對佈局,好比使用子View在父View中的相對位置。
【30】代碼摺疊,這個多是關於開發效率的,我也寫在編碼規範中,由於這個頗有用。Xcode7默認沒有開啓代碼摺疊,若是你的方法體行數很長,看起來會很不方便,此時你就能夠把方法「收起來」,一個類中的結構就會很清晰。開啓方法以下:
Xcode菜單-->Preferences-->Text Editing-->勾選Code folding ribbon.如圖:
。
【31】推薦方法的第一個花括號直接跟在方法體後,而不是另起一行,這樣能夠減小代碼行。
【32】推薦方法體中的第一行留空,最後一行不留空,這樣一個方法就會比較清晰。如圖:
。
可是若是該花括號裏面又是一個if,for之類的帶花括號的語句塊,那麼上述的第一行能夠不留空。
一樣,若是花括號內第一行是註釋的話,第一行也能夠不留空。註釋也起到了分隔代碼的做用,看起來比較清晰。
再者,若是花括號內只有一行代碼,第一行能夠不留空。
【33】block中第一行也要留空,同方法體中的第一行留空,使代碼清晰。
【34】表明類方法和實例方法的"+"加號,"-"減號後須要一個空格。這是一個很是小的細節,系統默認的方法都是這樣的,咱們本身聲明或者實現一個方法的時候也須要這樣:
。
【35】這一條有點像編程經驗了,就是爲解決某個問題估算時間。好比要開發某個功能、調試某個bug、給本身一個時間限制,若是在這期間不能解決問題,那麼就去尋求幫助。這既是給本身一個壓力,也爲了避免浪費時間。雖然,這一條其實很難作到,我每每因爲不甘心而無限拖延時間去解決問題。
【36】因爲提到編程經驗,就不得不提到版本控制。務必去學會SVN或者Git,就算你是獨立開發,也要學會控制本身的代碼,固然,你要常常備份你的代碼。
上面都是個人一家之言,若是你們的開發團隊或者公司有本身的編碼規範,固然按照團隊的來