下面說下iOS的代碼規範問題,若是你們以爲還不錯,能夠直接用到項目中,有不一樣意見 能夠在下面討論下。xcode
相信不少人工做中最煩的就是代碼不規範,命名不規範,曾經見過一個VC裏有3個按鈕被命名爲button一、button二、button3,全文沒有註釋,去看代碼邏輯才能知道這三個按鈕的意思,我也是醉了!微信
下面的規範 有的定的比較死,你們能夠根據本身團隊的風格進行修改。該文章主要是OC的代碼規範,有幾個是Swift的規範。網絡
OC和Swift的代碼規範以下:ide
一、 注意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
若是退出該頁面,沒有執行dealloc 方法,就是存在內存泄露的問題,因此都加上dealloc方法,並打印日誌。養成習慣。
一、經常使用的後綴名規則
除了下面幾個進行濃縮,其餘的只去掉UI 就能夠了(如UITextField寫成:TextField):
UIButton :Btn
UILabel :Lbl
UITableViewCell :Cell
Image :Img
UIViewController: VC
UITableViewController :TableVC
二、其餘
2.一、新建一個UIViewController 文件 後綴要 ViewController
2.二、新建一個UITableViewController 文件後綴要 ViewController
2.三、多個tag :用 枚舉 定義, 後綴:Tag
這個規範是爲了你們看每一個頁面,一看就知道那個方法是作什麼的,每一個團隊都應該根據本身的特色來定製。
若是團隊中有幾我的的命名很不規範(寫的方法名都看不懂),就須要按這條進行統一命名。若是團隊的成員都能很好的命名 這條就能夠省略。
一、初始化全部控件 統一一個方法名:initAllView
二、初始化數據 的方法名:initData
三、請求網絡,統一方法名前綴
vc 裏 只有一個網絡請求::loadNetData
多個 加後綴:load****NetData
四、網絡層的類加後綴: ***Request
五、Model 都要加後綴Model。。
六、點擊事件的前綴:tap
一、import規整順序, @end後留1個回車位置, @end前最後一個函數空1行
二、先 import類自己.h 再<>,以後」",include寫在一塊兒
#import 「AppDelegate.h"
#import <arpa/inet.h>
#import "OpenUDID.h"
一、多個協議名稱過長不用換行 依靠xcode自動伸縮。
二、方法 沒有參數或參數在一行,後面括號 不要換行,如:- (id)responseObject {。
方法有多個參數,參數換行,括號換行,如:
- (AFHTTPRequestOperation *)PUT: (NSString *)URLString parameters:(id)parameters success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure {
}
一、weak , copy的使用要多注意, NSArray ,NSdictionary, NSString 屬性定義儘可能用copy,這是爲了防止賦值給它的是可變的數據,若是可變的數據發生了變化,那麼該property也會發生變化。
二、變量先按功能分類擺放再按類型擺放,可考慮右對齊
一、每一個define按模塊分類後, 照字母天然順序排序
能夠多選判斷的時候要用下面的格式:
typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { SDWebImageRetryFailed = 1 << 0, SDWebImageLowPriority = 1 << 1, SDWebImageCacheMemoryOnly = 1 << 2, SDWebImageProgressiveDownload = 1 << 3, SDWebImageRefreshCached = 1 << 4, SDWebImageAvoidAutoSetImage = 1 << 11 };
一、 類,方法命名
類名首字母大寫,方法首字母小寫,方法中的參數首字母小寫,第二個參數名開始不要加"with", -, +號後面由一個空格
同時儘可能讓方法的命名讀起來像一句話,可以傳達出方法的意思
同時取值方法前不要加前綴「get」
手勢帶"tapGesture"、"tap"相似的,通知前綴"notification"、「note」相似的, 後面不用帶_
二、變量命名
意思完整性, 變量的命名btn, img類型在特徵詞最後,如 softBtn, homeVc, redImg
三、圖片目錄和命名
btn按鈕的圖,默認按下高亮爲普通狀態圖片名稱最後帶上後綴 「_h"
一級目錄(功能)_二級目錄(是btn仍是img)_三級目錄(特徵),如goodlist_btn_greenArrow
一、TODO
臨時處理方案或者未作的實現 加TODO。
二、NSAssert
使用斷言NSAssert來跟蹤異常: NSAssert(theDate != nil, @"Argument must be non-nil」);
三、Instruments
檢查本身模塊的內存、佔用時間、CPU、GPU等使用狀況。
一、初始化」id" 寫成 "instancetype"
二、int 用NSInteger,float用CGFloat
三、」:" 後別加空格, 函數第一個大括號不要換行
四、static const NSString * kLNasss = @""";
五、只要出現「,」 後面確定要寫一個空格
六、註釋靈活處理,複雜方法須要解釋清楚
七、無關的方法,變量都放到.m裏
八、儘可能別直接使用數字,字符串賦值,除非後面帶上說明該值來歷
九、 固定 的 字符串、數字 。若是 只有一處用了,就寫死。儘可能 註釋。
若是一個頁面用屢次,就在這個頁面定義 define
若是多個頁面 使用(多個地方 須要同時修改) 就定義成常量
十、if else 的問題。
//這裏寫總體的註釋
if () { } else { //這裏寫不寫都行 }
雖然局部變量大多數裏面的self不用weak也不會引發循環引用(tableview展現cell的時候例外cellForRowAtIndexPath),可是仍是推薦你們都加上__weak。
先打diff、再把diff 提交 reviewboard、 再提交svn(打標籤的時候帶CR:版本)
/** * * */
這樣寫能夠用快捷鍵查看註釋的內容 ,通常的不用這樣寫。。
重寫 scrollViewDidScroll 方法的頁面 ,要在dealloc中將scrollview.delegate = nil 。。不然 點擊返回鍵會崩潰。 iOS 9 修復了 scrollViewDidScroll崩潰的問題。
由於Swift 用NSLog 會記錄到系統日誌,能夠被黑客獲取。
用宏定義來屏蔽release環境下的NSLog日誌輸出 對 Swfit是沒用的。
歡迎關注 今日頭條號 名稱: 雲端夢想科技
歡迎關注 微信公衆號:dreams2999