你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> iOS開發編碼建議與編程經驗(持續更新中)

iOS開發編碼建議與編程經驗(持續更新中)

編輯:IOS開發基礎

303.jpg

作者:乞力馬扎羅的雪(GitHub) 原文 

在開發過程中,我們不僅要去看別人的代碼,也要讓別人看我們的代碼。那麼,有一個良好的編碼習慣將會非常重要。下面將會羅列使用Objective-C來開發iOS的編碼建議。

【1】任意函數長度不得超過50行。(其實很容易就超過50行,這就要考慮代碼抽取了。)

【2】任意行代碼不能超過80字符。(其實也很容易超過80字符,可以考慮多行顯示,比如有多個參數時,可以每個參數放一行。)可以在Xcode中設置超過80個字符的提醒,選中“Page guide at column”.設置完之後就會在代碼80個字符處有一條豎線。

QQ截圖20160318153402.png

【3】在每個方法的定義前留白一行,也就是在方法和方法之間留空一行。

【4】功能相近的方法要放在一起,並推薦使用#pragma mark - ***來導航代碼,切分代碼塊。這樣可以方便函數的查找。並且可以使用快捷鍵control+6 來快速查找方法的位置。

【5】二元運算符和參數之間要有一個空格,如賦值號=左右各留一個空格。

self.myString = @"235423rew523452345";

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

BOOL isOpen = true;  
BOOL isClose = !isOpen;

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

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

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

NSArray *array = @[@"111",  
                     @"2222222222",  
                     @"3333333",  
                     @"wwwwwwwwwwww"  
                     ];
                       @"age":@"20",  
                       @"gender":@"female",  
                       @"isMarried":@"false"  
                       };

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

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

【11】盡量減少代碼中的重復計算,比如代碼中多處要使用屏幕寬度,然後計算:[[UIScreenmainScreen] bounds].size.width ,很多次,閒得很繁瑣,代碼也冗長。不如直接宏定義:

#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】合理范圍內使用鏈式編程:

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

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

【16】函數調用時所有參數在同一行。如果參數過多,則可以每行一個參數,每個參數以冒號對齊。

【17】對傳入參數的保護或者說是否為空的判斷,盡量不要使用if(!obj),而使用NSAssert斷言來處理。NSAssert是系統定義的宏。

NSAssert(myName != nil, @"myName參數為空");
  • 如果條件判斷為真,則程序繼續執行。

  • 如果判斷條件為假,則拋出異常,異常內容為後面定義的字符串。

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

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

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

【20】當需要一定條件才執行某項操作時,最左邊的應該是最重要的代碼,不要將最重要的代碼內嵌到if中。如良好的風格是:

- (void) someMethod {  
if(![someOther boolValue]) {  
   return;  
  }  
//最重要的代碼寫在這裡;  
}

反面教材:

- (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.如圖:

300.png

【31】推薦方法的第一個花括號直接跟在方法體後,而不是另起一行,這樣可以減少代碼行。

【32】推薦方法體中的第一行留空,最後一行不留空,這樣一個方法就會比較清晰。如圖:

20160104110635156.png

但是如果該花括號裡面又是一個if,for之類的帶花括號的語句塊,那麼上述的第一行可以不留空。

同樣,如果花括號內第一行是注釋的話,第一行也可以不留空。注釋也起到了分隔代碼的作用,看起來比較清晰。

再者,如果花括號內只有一行代碼,第一行可以不留空。

【33】block中第一行也要留空,同方法體中的第一行留空,使代碼清晰。

【34】代表類方法和實例方法的"+"加號,"-"減號後需要一個空格。這是一個非常小的細節,系統默認的方法都是這樣的,我們自己聲明或者實現一個方法的時候也需要這樣:

20160104111446532.png

【35】這一條有點像編程經驗了,就是為解決某個問題估算時間。比如要開發某個功能、調試某個bug、給自己一個時間限制,如果在這期間不能解決問題,那麼就去尋求幫助。這既是給自己一個壓力,也為了不浪費時間。雖然,這一條其實很難做到,我往往由於不甘心而無限拖延時間去解決問題。

【36】由於提到編程經驗,就不得不提到版本控制。務必去學會SVN或者Git,就算你是獨立開發,也要學會控制自己的代碼,當然,你要經常備份你的代碼。

上面都是我的一家之言,如果大家的開發團隊或者公司有自己的編碼規范,當然按照團隊的來。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved