iOS開發編碼建議與編程經驗

【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編碼

 print?在CODE上查看代碼片派生到個人代碼片spa

  1. self.myString = @"235423rew523452345";  .net

【6】一元運算符和參數之間不放置空格,好比!非運算符,&按位與,|按位或。

[objc] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. BOOL isOpen = true;  

  2. BOOL isClose = !isOpen;  


【7】強制類型轉換和參數之間不放置空格。

[objc] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. NSString *str3 = (NSString*)self.myString;  


【8】長的變量值應該拆分爲多行。尤爲體如今使用數組或者字典。如下也分別是快速聲明數組@[]和字典@{}的方法。

[objc] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. NSArray *array = @[ @"111",  

  2.                      @"2222222222",  

  3.                      @"3333333",  

  4.                      @"wwwwwwwwwwww"  

  5.                      ];  


[objc] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. NSDictionary *dict = @{@"name":@"jack",  

  2.                        @"age":@"20",  

  3.                        @"gender":@"female",  

  4.                        @"isMarried":@"false"  

  5.                        };  


【9】儘可能使用有意義的名字命名,拒絕使用i,j等無心義字符命名。類的命名首字母大寫,其餘變量的命名首字符小寫,並使用駝峯式分割單詞。

【10】儘可能減小在代碼中直接使用數字常量,而使用宏定義等方式。如:MAX_NUMBER_PHONE替代8等等。這樣咱們搜索也比較方便。

【11】儘可能減小代碼中的重複計算,好比代碼中多處要使用屏幕寬度,而後計算:[[UIScreenmainScreenbounds].size.width ,不少次,閒得很繁瑣,代碼也冗長。不如直接宏定義:

[objc] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. #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

 print?在CODE上查看代碼片派生到個人代碼片

  1. NSString *myName = [[NSString alloc] init];  

可是嵌套不宜超過3層,超過3層需進行重構。

【16】函數調用時全部參數在同一行。若是參數過多,則能夠每行一個參數,每一個參數以冒號對齊。
【17】對傳入參數的保護或者說是否爲空的判斷,儘可能不要使用if(!obj),而使用NSAssert斷言來處理。NSAssert是系統定義的宏。

[objc] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. NSAssert(myName != nil@"myName參數爲空");  

   若是條件判斷爲真,則程序繼續執行;

   若是判斷條件爲假,則拋出異常,異常內容爲後面定義的字符串;

【18】方法參數名前通常使用"an","the","new"來進行修飾。如:

[objc] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. -(void)setPersonInfo:(NSString*)theID theName:(NSString*)theName theAge:(NSInteger*)theAge  

【19】if-else超過四層的時候,就要考慮重構,多層的if-else結構很難維護。

【20】當須要必定條件才執行某項操做時,最左邊的應該是最重要的代碼,不要將最重要的代碼內嵌到if中。

如良好的風格是:

[objc] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. - (void) someMethod {  

  2. if(![someOther boolValue]) {  

  3.    return;  

  4.   }  

  5. //最重要的代碼寫在這裏;  

  6. }  


反面教材:

[objc] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. - (void) someMethod {  

  2. if([someOther boolValue]) {   

  3.      //重要代碼;  

  4.   }  

  5. }  


【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,就算你是獨立開發,也要學會控制本身的代碼,固然,你要常常備份你的代碼。


上面都是個人一家之言,若是你們的開發團隊或者公司有本身的編碼規範,固然按照團隊的來

相關文章
相關標籤/搜索