對於一個IT團隊來說,代碼的規範性是至關重要的,如果你的碼友看你的代碼比較費勁,那你就需要自省了。本人蔘考(蘋果官方推薦的代碼編寫規範性)和(pjk1129的博客),總結了以下幾點,僅供參考。
命名
命名規則對於維護代碼來說是非常重要的,。Objective-C方法名往往很長,不過這也有好處,讓很多註釋變得毫無意義。
本文推薦駝峯法。
駝峯法分小駝峯法和大駝峯法。小駝峯法:除第一個單詞之外,其他單詞首字母大寫。大駝峯法相比小駝峯法,大駝峯法把第一個單詞的首字母也大寫了。
*1. 清晰
即清晰又簡潔是最好的了,但簡潔不如清晰重要。儘量不要使用單詞的簡寫,除了非常常用的簡寫以外,儘量使用單詞全稱。API的名稱不要有歧義,一看你的API就知道是以什麼方式做了什麼事情,不要讓人有疑問。
*2.類命名
類名(不包括類別和協議名)應該用大寫開頭的大駝峯命名法。類名中應該包含一個或多個名詞來說明這個類(或者類的對象)是做什麼的。
在應用級別的代碼裏,儘量不要使用帶前綴的類名,每個類都有相同的前綴不能提高可讀性。不過如果是編寫多個應用間的共享代碼,前綴就是可接受並推薦的做法了(型如 JKPhotoBrowser ),注:儘量不要使用自己名字全拼的首字母來作爲前綴。
示例1:
@interface ImageBrowseView :UIView
@end
示例2:(帶前綴JK)
@interface JKPhotoBrowser :UIView
@end
*3.類別命名
類名+標識+擴展(UIImageView +MY+Web)
例:如果我們想要創建一個基於UIImageView 的類別用於網絡請求圖片,我們應該把類別
放到名字是UIImageView+HPWeb.h的文件裏。UIImageView爲要擴展的類名,MY爲專屬標識,Web爲擴展的功能。
類別的方法應該都使用一個前綴(型如my_myCategoryMethodOnAString ),以防止Objective-C代碼在單名空間裏衝突。如果代碼本來就不考慮共享或在不同的地址空間(address-space),方法命名規則就沒必要恪守了。
類別MYWeb頭文件,UIImageView+MYWeb.h如下:
@interface UIImageView (MYWeb)
-(void)my_setImageWithURLString:(NSString *)urlStr;
@end
*4.方法命名
方法使用小駝峯法命名, 一個規範的方法讀起來應該像一句完整的話,讀過之後便知函數的作用。執行性的方法應該以動詞開頭,小寫字母開頭,返回性的方法應該以返回的內容開頭,但之前不要加get。
示例:
-(void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;
-(instancetype)arrayWithArray:(NSArray *)array;
如果有參數,函數名應該作爲第一個參數的提示信息,若有多個參數,在參數前也應該有
提示信息(一般不必加and)
一些經典的操作應該使用約定的動詞,如initWith,insert,remove,replace,add等等。
*5.變量命名
變量名使用小駝峯法, 使變量名儘量可以推測其用途屬性具有描述性。別一心想着少打幾個字母,讓你的代碼可以迅速被理解更加重要。
* *5.1類成員變量**
成員變量用小駝峯法命名並前綴下劃線,Objective-C 2.0,@property 和 @synthesize 提供了遵守命名規範的解決方法
示例:
@interface ViewController ()
@property (nonatomic,strong)NSMutableArray *dataArray;
@property (nonatomic,strong)UITableView *tableView;
@end
@implementation ViewController
@end
* *5.2一般變量命名**
示例:
NSMutableArray *ticketsArray = [NSMutableArray arrayWithCapacity:0];
NSInteger numCompletedConnections =3;
* *5.3常量命名**
常量(預定義,枚舉,局部常量等)使用小寫k開頭的駝峯法,比如kInvalidHandle , kWritePerm
示例:#define kRunAnnotationStartPointTitle @“起點”
typedef NS_ENUM (NSInteger,RunGoalTypeE){
kRunGoalTypeNone = 0, //無目標
kRunGoalTypeTime = 1, //以時間爲目標
kRunGoalTypeDistance = 2, //以距離爲目標
kRunGoalTypeCalori = 3, //以消耗卡路里爲目標
};
NSString *const kGroupInfoName =@”name”;
*6.圖片命名
原則:
1)採用單詞全拼,或者大家公認無岐義的縮寫(比如:nav,bg,btn等)
2)採用“模塊+功能”命名法,模塊分爲公共模塊、私有模塊。公共模塊主要包括統一的背景,導航條,標籤,公共的按鈕背景,公共的默認圖等等;私有模塊主要根據app的業務功能模塊劃分,比如用戶中心,消息中心等
備註:建議背景圖採用以bg作前綴,按鈕背景採用btn作前綴(不作強制要求,項目實際負責人根據團隊特點確定即可)
公共模塊命名示例:
導航條背影圖片:[email protected]
導航返回按鈕:[email protected],[email protected]
標籤item背景:[email protected],[email protected]
私有模塊命名示例:
uc——user center
用戶中心頭像默認圖:[email protected]
用戶中心頂部默認背景圖:[email protected]
用戶中心底部背景圖:[email protected]
總結:
1 下面所有規則對第三方類庫無約束
* 所有類、方法、屬性等命名,做到見名知意,採用駝峯式命名規則
* 根據資源類型或者所屬業務邏輯對項目資源進行分組,使得整個項目結構清晰明瞭
* 整個項目保持一種代碼書寫風格(這個風格由團隊商量來定),讓你的代碼變的優雅且簡單易懂!
2. 命名規範
* 所有類名稱以項目工程開頭命名,eg:“XP”、“ZJG”、“SZ”
* 針對不同視圖控制器,在末尾添加後綴,eg:
UIViewController 後綴添加“ViewController”
UIView 後綴添加“View”
UIButton 後綴添加“Button”
UILabel 後綴添加“Label”
. 單頁代碼最好控制在800行以內,每個方法最好不要超過100行,過多建議對代碼進行重構
4. 相同的邏輯方法定義避免在多個地方出現,儘量將公用的類、方法抽取出來
5. 刪除未被使用的代碼,不要大片註釋未被使用的代碼,確定代碼不會使用,要及時刪除
6. 刪除多餘的註釋
7. 刪除多餘的空行
8. 刪除未被使用的資源文件
9. 對其他項目中copy過來的代碼,根據具體需要更新代碼風格,及時刪除未被使用的代碼
10. 項目中所有Group或者文件名稱(圖片名字等),不要使用漢字命名,儘量使用英文命名,國內特有名詞可以使用拼音。
11. 項目中所有Group都需要在項目目錄中存在一個真實的目錄,Group中的文件與真實目錄中文件一一對應。12. 請在項目中寫必要代碼的註釋
12. 整體代碼風格需要統一
* 代碼後面的”{“ 不需要單獨佔用一行
* 邏輯運算符 與 代碼之前空一格
例:
if (you are a cool boy){
//do something
}
* “#pragma mark -” 與下面的代碼之前不要空行
* 遵循一般性的代碼規範
13. 請多使用 #pragma mark - Mark Name 對方法進行分組 eg:
* #pragma mark - View lifeCycle
* #pragma mark - View lifeTerm
* #pragma mark - Init methods
* #pragma mark - Action methods
* #pragma mark - Common methods
* #pragma mark - UIActionSheetDelegate
* #pragma mark - UIImagePickerControllerDelegate
* #pragma mark - UITableViewDelegate Methods
* #pragma mark - UITableViewDataSource Methods
* #pragma mark - UIScrollViewDelegate Methods
* #pragma mark - UITextFieldDelegate Methods
* #pragma mark - UITextViewDelegate Methods