iOS代碼規範(OC和Swift)

下面說下iOS的代碼規範問題,若是你們以爲還不錯,能夠直接用到項目中,有不一樣意見 能夠在下面討論下。xcode

相信不少人工做中最煩的就是代碼不規範,命名不規範,曾經見過一個VC裏有3個按鈕被命名爲button一、button二、button3,全文沒有註釋,去看代碼邏輯才能知道這三個按鈕的意思,我也是醉了!微信

下面的規範 有的定的比較死,你們能夠根據本身團隊的風格進行修改。該文章主要是OC的代碼規範,有幾個是Swift的規範。網絡

OC和Swift的代碼規範以下:ide

1、VC生命週期 模塊排列順序

一、 注意svn

#pragma mark -(加橫線)是用來 區分大模塊的,首字母要大寫。函數

#pragma mark(不加橫線)是標註 小模塊的, mark與函數第一行不要有空行,沒有的模塊不用寫mark。spa

二、基本標準調試

#pragma mark - Life Cycle日誌

viewDidLoad前的代碼規範

viewDidLoad

viewDidLoad後的

dealloc

#pragma mark - (系統提供的delegate)

#pragma mark - (自定義的delegate)

#pragma mark - (第三方的delegate)

#pragma mark - Event response // 這裏主要放IBAction,通知,gesture等

#pragma mark - Public method

#pragma mark - Private method

#pragma mark - Getters and Setters

三、項目中經常使用到的

#pragma mark - Life Cycle

#pragma mark - Override

#pragma mark - UITableViewDelegate

#pragma mark - CustomDelegate

#pragma mark - Event Response

#pragma mark - Public Methods

#pragma mark - Getters and Setters

2、VC裏都要 加入 dealloc 方法

若是退出該頁面,沒有執行dealloc 方法,就是存在內存泄露的問題,因此都加上dealloc方法,並打印日誌。養成習慣。

3、控件統一後綴名

一、經常使用的後綴名規則

除了下面幾個進行濃縮,其餘的只去掉UI 就能夠了(如UITextField寫成:TextField):

UIButton :Btn

UILabel :Lbl

UITableViewCell :Cell

Image :Img

UIViewController: VC

UITableViewController :TableVC

二、其餘

2.一、新建一個UIViewController 文件 後綴要 ViewController

2.二、新建一個UITableViewController 文件後綴要 ViewController

2.三、多個tag :用 枚舉 定義, 後綴:Tag

4、統一方法名

這個規範是爲了你們看每一個頁面,一看就知道那個方法是作什麼的,每一個團隊都應該根據本身的特色來定製。

若是團隊中有幾我的的命名很不規範(寫的方法名都看不懂),就須要按這條進行統一命名。若是團隊的成員都能很好的命名 這條就能夠省略。

一、初始化全部控件 統一一個方法名:initAllView

二、初始化數據 的方法名:initData

三、請求網絡,統一方法名前綴

vc 裏 只有一個網絡請求::loadNetData

多個 加後綴:load****NetData

四、網絡層的類加後綴: ***Request

五、Model 都要加後綴Model。。

六、點擊事件的前綴:tap

5、文件#import和@end

一、import規整順序, @end後留1個回車位置, @end前最後一個函數空1行

二、先 import類自己.h 再<>,以後」",include寫在一塊兒

#import 「AppDelegate.h"

#import <arpa/inet.h>

#import "OpenUDID.h"

6、換行與括號

一、多個協議名稱過長不用換行 依靠xcode自動伸縮。

二、方法 沒有參數或參數在一行,後面括號 不要換行,如:- (id)responseObject {。

方法有多個參數,參數換行,括號換行,如:

- (AFHTTPRequestOperation *)PUT: (NSString *)URLString
             parameters:(id)parameters
                success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
                failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure

{
}

 

7、@property規範

一、weak , copy的使用要多注意, NSArray ,NSdictionary, NSString 屬性定義儘可能用copy,這是爲了防止賦值給它的是可變的數據,若是可變的數據發生了變化,那麼該property也會發生變化。

二、變量先按功能分類擺放再按類型擺放,可考慮右對齊

8、Define模塊

一、每一個define按模塊分類後, 照字母天然順序排序

9、Typedef的規範

能夠多選判斷的時候要用下面的格式:

typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) {
    SDWebImageRetryFailed = 1 << 0,
    SDWebImageLowPriority = 1 << 1,
    SDWebImageCacheMemoryOnly = 1 << 2,
    SDWebImageProgressiveDownload = 1 << 3,
    SDWebImageRefreshCached = 1 << 4,
    SDWebImageAvoidAutoSetImage = 1 << 11
};

 

10、經常使用命名規則

一、 類,方法命名

類名首字母大寫,方法首字母小寫,方法中的參數首字母小寫,第二個參數名開始不要加"with", -, +號後面由一個空格

同時儘可能讓方法的命名讀起來像一句話,可以傳達出方法的意思

同時取值方法前不要加前綴「get」

手勢帶"tapGesture"、"tap"相似的,通知前綴"notification"、「note」相似的, 後面不用帶_

二、變量命名

意思完整性, 變量的命名btn, img類型在特徵詞最後,如 softBtn, homeVc, redImg

三、圖片目錄和命名

btn按鈕的圖,默認按下高亮爲普通狀態圖片名稱最後帶上後綴 「_h"

一級目錄(功能)_二級目錄(是btn仍是img)_三級目錄(特徵),如goodlist_btn_greenArrow

11、調試用法

一、TODO

臨時處理方案或者未作的實現 加TODO。

二、NSAssert

使用斷言NSAssert來跟蹤異常: NSAssert(theDate != nil, @"Argument must be non-nil」);

三、Instruments

檢查本身模塊的內存、佔用時間、CPU、GPU等使用狀況。

12、要注意的

一、初始化」id" 寫成 "instancetype"

二、int 用NSInteger,float用CGFloat

三、」:" 後別加空格, 函數第一個大括號不要換行

四、static const NSString * kLNasss = @""";

五、只要出現「,」 後面確定要寫一個空格

六、註釋靈活處理,複雜方法須要解釋清楚

七、無關的方法,變量都放到.m裏

八、儘可能別直接使用數字,字符串賦值,除非後面帶上說明該值來歷

九、 固定 的 字符串、數字 。若是 只有一處用了,就寫死。儘可能 註釋。

若是一個頁面用屢次,就在這個頁面定義 define

若是多個頁面 使用(多個地方 須要同時修改) 就定義成常量

十、if else 的問題。

//這裏寫總體的註釋

if () {

} else { //這裏寫不寫都行

}

 

十3、使用block要注意循環引用

雖然局部變量大多數裏面的self不用weak也不會引發循環引用(tableview展現cell的時候例外cellForRowAtIndexPath),可是仍是推薦你們都加上__weak。

十4、reviewboard的使用流程

先打diff、再把diff 提交 reviewboard、 再提交svn(打標籤的時候帶CR:版本)

十5、重要的公用功能 .h 用的註釋格式:

/**
*
*
*/

 

這樣寫能夠用快捷鍵查看註釋的內容 ,通常的不用這樣寫。。

十6、scrollViewDidScroll

重寫 scrollViewDidScroll 方法的頁面 ,要在dealloc中將scrollview.delegate = nil 。。不然 點擊返回鍵會崩潰。 iOS 9 修復了 scrollViewDidScroll崩潰的問題。

十7、Swift文件裏 打印日誌 用print, 必定不能用NSLog

由於Swift 用NSLog 會記錄到系統日誌,能夠被黑客獲取。

用宏定義來屏蔽release環境下的NSLog日誌輸出 對 Swfit是沒用的。

 

歡迎關注 今日頭條號 名稱: 雲端夢想科技  

歡迎關注 微信公衆號:dreams2999

相關文章
相關標籤/搜索