iOS 代碼規範

1 目的

統一規範XCode編輯環境下Objective-C、swift的編碼風格和標準swift

2 適用範圍

適用於全部用Objective-C,swift語言開發的項目。數組

3 編碼規範

3.1 文件

  1. 項目文件必須使用一個有意義的名字且前綴以PRJ_。例如:XCcode中下拉刷新的項目文件被命名爲’PRJ_PullDownRefresh.xcodeproj’。
  2. 對於文件的目錄要按以下結構建立:
    • 創建Libraries文件夾,全部第三方庫放入其中.(CocoaPods代替)
    • 創建Constants.h頭文件,全部的常量定義於其中。Constants.h文件放入Main文件組裏面
    • 項目中全部Group或者文件名稱(圖片名字等),不要使用漢字命名,儘可能使用英文命名,國內特有名詞能夠使用拼音。

    • 項目中全部Group都須要在項目目錄中存在一個真實的目錄,Group 中的文件與真實目錄中文件一一對應。
  3. 爲了避免影響閱讀,一個類的代碼行數儘可能不要超過300行;一個方法儘可能不要超過30行。有超過的在重構的時候想辦法分解。

3.2 註釋

  1. 註釋能夠採用’ /* */ ’和’ // ’兩種註釋符號,涉及到多行註釋時,儘可能使用’ /* */ ’。
  2. 對於一行代碼的註釋可放在前一行及本行上,不容許放在下一行,更不容許在一行語句的中間加入註釋。
  3. 單元文件的文件頭註釋說明應按以下格式:
//
//  ViewController.m
//  規範Demo
//
//  Created by KongYu on 16/5/18.
//  Copyright © 2016年 SLH. All rights reserved.
//

//  功能描述:
//  修改記錄:
//      張三     2016-05-19  改變tableView的headerView的佈局

 

  1. 沒必要每行都加註釋,在3~10行左右的段落作註釋要好於每行都作註釋,顯而易見的代碼不加註釋。例如:
if (!returnValue) {//調用登陸過程失敗無用的註釋
  NSLog(@」登陸失敗」);
}

 

  1. 方法的註釋建議使用Xcode插件VVDocument使用,變量註釋使用/** */ (使用的時候能夠看到註釋), 如:
/**
 *  <#Description#>
 *
 *  @param application   <#application description#>
 *  @param launchOptions <#launchOptions description#>
 *
 *  @return <#return value description#>
 */

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  // Override point for customization after application launch.
  return YES;
}

 

3.3 編碼排版格式

  1. 代碼的縮進應使用空格(SPACE),不能使用製表符(TAB),而且縮進以2個字符爲單位。4個空格TAB
  2. 中括弧的每個括弧在源程序中要單獨佔一行。例如
for (int i = 0; i < 10; i++) {
}

 

  1. 空格的使用
    •  關鍵字與其後的表達式之間要有空格,如: if (expr)或for (expo)
    • 單目操做符不該與它們的操做數分開(如’!’和’^’等)。
    • 除’ , ’外,其它雙目操做符應與它們的操做數用空格隔開。例如
i=i+1;              //錯誤的寫法,操做符兩端沒有空格
i = i + 1;            //正確的寫法,
if(a>b)             //錯誤的寫法,邏輯判斷符號兩端沒有空格
if(a > b)            //正確的寫法

 

  • .h中協議<>前面有一個空格。
  • .h中成員聲明時,類型與變量之間有至少1個空格。*號靠近變量,不靠近類型。
  • @property後留1個空格,()裏面,逗號緊跟前一變量,與後一變量之間留1個空格。()外面,先留1個空格,再聲明屬性。
  • 方法的+,-後面與()之間留1個空格。
  • 返回類型與*之間留1個空格,方法參數中返回類型與*之間留1個空格。
  • 在多參數方法中,每一個參數後面都有1個空格。
  1. 每行只能有一個語句
    //不正確寫法
     NSUInteger objectIndex, stuffCount;
或
@synthesizeMyView, MyLabelView;


   //正確寫法
   NSUIntegerobjectIndex;
   NSUIntegerstuffCount;
 或
  @synthesizeMyView;
  @synthesizeMyLabelView;

 

  1. 關於空行
    • .h中的空行 --文件說明與頭文件包含(#import)之間空1行
      • 頭文件包含(#import)之間,若是須要分類區別,各種別之間空1行。
      • 頭文件包含(#import)與@class之間空2行。
      • @interface與@class之間空1行。
      • 頭文件{}裏面,空1行開始聲明對象成員,若是須要分類區別,各種別之間空1行。
      • 頭文件{}外,空1行書寫屬性,若是須要分類區別,各種別之間空1行。
      • 屬性下面空1行開始寫方法,若是須要分類區別,各種別之間空1行。
      • 方法完成後,空1行@end。
      • 若是須要聲明protocol,空2行接着寫。一般protocol寫在@end後面,可是聲明在@interface以前。 -.m中的空行
      • 文件說明與頭文件包含(#import)之間空1行
      • 頭文件包含(#import)之間,若是須要分類區別,各種別之間空1行。
      • @implementation和@synthesize之間空1行, 若是須要分類區別,各種別之間空1行。
      • @synthesize與方法之間空1行。
      • 方法與方法之間空1行。
    • 方法裏面的空行
      • 變量聲明後須要空1行,若是須要分類區別,各種別之間空1行。
      • 條件、循環,選擇語句,整個語句結束,須要空1行。
      • 各功能快之間空1行。
      • 最後一個括弧以前不空行。
      • 註釋與代碼之間不空行。
      • 類中第個功能模塊以 #pragma mark - 分隔,上空兩行,下空一行。
      • 每行代碼最多不得操做80個字。設置以下:Xcode => Preferences =>TextEditing => Page Guide at column /輸入 80便可。

3.4 命名規範

  1. 保留字 Objective-c語言的保留字或關鍵詞應所有使用小寫字母,除下表中保留字外,private、protected、public、在類型說明中也做爲保留字使用。還有nonatomanic,retain,readwrite,readonly等也有特殊的使用場合。
  1. 方法
    • 方法的名稱應所有使用有意義的單詞組成,且以小寫字母開頭,多單詞組合時,後面的單詞首字母大寫。例如:
- (void)getUserInformation……

 

  • 設置類變量的內容的方法應使用set做爲前綴,讀取變量的內容的方法應使用get做爲前綴。例如:
- (void)getUserName;
- (void)setUserName: (NSString *)userName;

 

  • 方法中的參數:第一個參數名稱要從函數名稱上攜帶出來,第二個參數的首字母小寫,多個單詞組合時,後面單詞首字母大寫。參數有別名時,參數別名與參數名一致,但參數名前綴以_。參數別名與前一參數保留1個空格。參數無別名時,以有意義的字母命名。例如:
- (void)myFunctionWithSizeA:(CGSize)sizeA
                      sizeB:(CGSize)_sizeB;

 

  • 當參數過長時,每一個參數佔用一行,以冒號對齊
- (void)writeFisrtNumber:(NSString *)firstStr
            withNextNumber:(NSString *)nextStr
             withLastNumber:(NSString *)lastStr {
}

 

  • 若是方法名比參數名短,每一個參數佔用一行,至少縮進4個字符,且爲垂直對齊(而非使用冒號對齊)
- (void)writeA:(NSString *)firstStr
        withBBBBBBBBBBB:(NSString *)nextStr
        withCCCCCC:(NSString *)lastStr {
    
}

 

  1. 變量
    • 變量必須起有意義的名字,使其餘組員能夠很容易讀懂變量所表明的意義,變量命名能夠採用同義的英文命名,可以使用幾個英文單詞,第一個單詞首字母小寫,其餘單詞首字母大寫。例如:
NSString *username;

 

  • 對於一些特殊類型的變量,命名時要帶上類型,如NSArray的變量命名爲xxxArray,其餘的如xxxDictionary,xxxSize等。這樣就能夠從名稱上知道是什麼類型的變量。千萬不能將NSArray的變量命名爲xxxDictionary. 如如果可變的變量加M, eg: xxxMArray。
  • 對於要和interface builder關聯的的輸出口變量,命名時要後綴以特定的控件名.常見的:
UIViewController:VC          UIImage:Img                UIImageView:ImgView  UIView:View  
UILabel:Label                       UIButton:Btn                  UINavigationBar:NBar  UIToolBar:TBar  
UISearchBar:SBar                UITextField:textField     UITextView:TextView
 NSArray:Array       NSMutableArray:MArray         NSDictionary:Dict       NSMutableDictionary:Dict
NSString:Str         NSMutableString:MStr               NSSet:Set             NSMutableSet:MSet

 

  • 對於使用c語言形式聲明的變量,一些特定類型可採用必定的簡寫:例如:
指針類型:P
結構體類型:Rec
數組類型:Arr
   Core Graphic:CG 等。

 

  • 循環控制變量一般使用單一的字符如:i、j、k等。使用有意義的名字,如objectIndex也是能夠的。
  • 儘可能避免使用全局變量,若是必須使用全局變量則必須加前綴‘ Pub_’,同時應在變量名稱中體現變量的類型。
  • 私有實例變量前加一個下劃線,如_myPrivateVarible。
  • 枚舉變量也要有相應的前綴來區分不一樣的enum變量。好比蘋果公司的一個enum。例如:
/* Drawing modes for text. */

enumCGTextDrawingMode {
  kCGTextFill,
  kCGTextStroke,
  kCGTextFillStroke,
  kCGTextInvisible,
  kCGTextFillClip,
  kCGTextStrokeClip,
  kCGTextFillStrokeClip,
  kCGTextClip
};

 

  1. 常量
    • 避免在程序中直接出現常數,使用超過一次的應以宏定義的形式來替代。
    • 常數的宏定義應與它實際使用時的類型相一致。如以3.0來定義浮點類型,用3表示整型。
    • 常量的命名應當可以表達出它的用途,而且用大寫字母表示。例如:
#define PI 3.1415926

 

  • 宏變量以k開頭.eg:
#define kLogin 「login」

 

    • 全部的類名,接口名(Protocol)均以大寫字母開頭,多單詞組合時,後面的單詞首字母大寫。類,接口名必須是有意義的。
    • 繼承自UIView的類以View結尾。例如:
OperatorUsersInfomationView,LabelView等。

 

  • 繼承自ViewController的類以viewController結尾。例如:
HomePageViewController,LoginViewController等。其餘類推。

 

  • 全部保存數據的實體以Model結尾。例如:
UserModel,FriendModel

 

  • 若是類聲明中包含多個protocal,每一個protocal佔用一行,縮進2個字符
@interfaceRootViewController : UITableViewController <
UITableViewDelegate,
UITableViewDataSource,
UITextFieldDelegate,
UITextViewDelegate
 
> {
……
}

 

4 修改規範

4.1 新增代碼行

新增代碼行的先後應有註釋行說明。xcode

//修改人,修改時間,修改說明
新增代碼行
//修改結束

 

4.2 刪除代碼行

刪除代碼向的先後用註釋行說明app

//修改人,修改時間,修改說明
要刪除的代碼行(將要刪除的語句進行註釋)
//修改結束

 

4.3 修改代碼行

修改代碼行以註釋舊代碼行後再新增代碼行的方式進行。ide

//修改人,修改時間,修改說明
//修改前代碼行開始
//修改前代碼行
//修改前代碼行結束
//修改後代碼行開始
修改後代碼行
//修改結束
相關文章
相關標籤/搜索