关于手思3.0 代码规范
關于手思3.0 代碼規范
工程之始可能需要的工具:
1、使用CocoaPods類庫管理工具。CocoaPods安裝和使用教程。
2、下載安裝注釋插件VVDocumenter-Xcode。
3.使用代碼對齊的Xcode插件
XAlign:XALign
ClangFormat ClangFormat-Xcode
4.快速進入沙盒目錄
ZLGotoSandboxPlugin:查看沙盒的插件,當運行模擬器的時候,Shift + Common + w 直接查看當前模擬器下程序的沙盒。
?
一、手思項目結構管理
#pragma mark -關于手思3.0對于文件的目錄要按如下結構創建: -CategoryEx(所有類別類擴展放在里面) -HelpMacro(項目宏定義) -Resources (所有圖片資源,聲音文件,其他資源,相應資源放入相應組(Group)中) -Utilities (工具集合,網絡請求,工具類,第三方庫等) -MobileSiBuControllers(所有項目模塊代碼文件) -CustomUI (自定義UI控件) -引用外部文件或者某個單獨的功能時,放在單獨的組中?
關于手思3.0規范要點
1.命名規范(詳見下文) 2.所有控制器繼承BaseViewController 如:@interface HomeViewController : BaseViewController3.ViewController,view,model應添加前綴SB (MVC) 4.使用DLOG(<#...#>)打印而不是NSLog(..),有大量打印信息時應把DLOG注釋掉 5.使用快捷鍵Command+shift+B,檢查代碼內存泄漏問題 6.所有保存數據的實體以Model結尾,如:UserModel 7.viewWillAppear,viewWillDisappear等寫在viewDidLoad上面,dealloc寫在.m文件最底行
8.不能出現警告,過時方法用新方法替代,沒有用到的變量刪掉或注釋掉
?
二、編碼規范
為了提交團隊合作效率,在項目開發中,對于項目、類,變量等的命名,應該要易讀,易理解
一)、命名規范
關于命名的一般性的原則
1.最少字符,就是要盡量的減少命名對象的長度,盡量選擇字符少的名詞
2.名符其實,命名應該能直觀的描述被命名對象是什么或者做什么
3.避免歧義,盡量不要采用多義詞,也不要使用命名組合之后產生多義的方式
4.上下文一致,比如謂詞的統一性,如果都是集合類,那么使用Remove表示刪除操作,那么所有上下文就應該都用這個Remove,而不要再用Delete
5.少用縮寫,除非是很常見的縮寫或者項目中定義好的縮寫,否則不要使用縮寫
6.優先使用全局常量而非宏,應使用static方式聲明常量;
主要點:控制器,自定義view以SB開頭
多單詞組合時,后面的單詞首字母大寫
如SBLoginViewCotroller,SBHomeViewCotroller
?? SBPopView
?
鑒于目前項目使用的是MJExtensio進行字典模型自動轉換,所以屬性名與后臺保持一致即可
(1)類命名
1、變量首字母小寫,后面單詞首字母大寫,如userPassWord
2、使用能夠反映類功能的名詞短語(使用英文翻譯)
3.命名時帶上類型,如xxxTv,xxxView,xxxStr等
4、文件名應包含描述繼承的類,如:文件名:BaseViewController ? 類:UIViewController
所有類名,接口名(Protocol)均以大寫字母開頭,多單詞組合時,后面的單詞首寫字母大寫。
4、自定義控件命名,以相應類名為后綴命名。
對于UI相關的變量,命名時要后綴以特定的控件名,如UILabel的變量命名為xxxLabel,xxxCell,其他的如xxxButton,xxxTableView,xxxImageView等;
?
(2)特殊類命名
舉例:BaseClient、ImageStore
(3)分類(類別)命名
與類命名相同,此外需添加要擴展的類名和“+”
舉例:NSString+URLEncoding
(4)協議(委托)命名
與類命名相同,此外需添加“Delegate”后綴
舉例:UITableViewDelegate,MBProgressHUDDelegate
(5)方法及參數命名
方法:
首字母小寫,之后每個單詞首字母都大寫
方法名使用動詞短語,能具體表達出該方法的功能
參數:
首字母小寫,之后每個單詞首字母都大寫
具有足夠的說明性
舉例:
- (void)viewWillAppear:(BOOL)animated - (void)setupPostValue:(int)value - (void)adjustFontWithMaxSize:(CGSize)maxSize?
參數要用描述該參數的標簽命名
- (void) sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag; //對 - (void) sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag; //錯
當參數過長時,每個參數占用一行,以冒號對齊。如:
?
(6).點擊事件響應(下面幾種寫法都可以)
?
以 get、set 開頭的方法有特殊的意義,不要隨意定義。
?
屬性和變量申明問題
#pragma mark -變量問題 1.私有變量不應該寫在h里面,h是對外公開的,更應該寫到m里面 2.實例變量(成員變量),最好帶上前綴下劃線 3.變量需要有一定注釋 4.成員變量不應少于3個字符,采取見名知義原則@interface ViewController () {//成員變量NSString *_name; //名字int *_age; //年齡NSString *_passWord; //密碼NSArray *_array1; }//屬性變量 @property (nonatomic,strong) NSArray *array2; 注意點:私有屬性,變量寫在.m文件中,.h文件中只寫對外公開的屬性變量方法和變量的命令應該盡可能做到自描述。 良好的風格: UIButton *settingsButton;不良的風格: UIButton *setBut;?
控件及數據的初始化
#pragma mark -初始化UI控件及數據源 使用initUI(或createSubview) 管理UI控件初始化,initDataSource初始化array,dict //初始化所有UI相關 - (void)initUI {[self initButton];[self initLabel]; }//初始化數據源 -(void)initDataSource {NSString *dataPath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];NSMutableArray *pesonArray=[[NSMutableArray alloc]initWithCapacity:0]; }- (void)initButton {UIButton *CSButton=[UIButton buttonWithType:UIButtonTypeCustom];CSButton.frame=CGRectMake(100,100, 100, 80);[CSButton addTarget:self action:nil forControlEvents:UIControlEventTouchDown];[self.view addSubview:CSButton]; }-(void)initLabel {UILabel *CSLabel=[[UILabel alloc]initWithFrame:CGRectMake(10, 10, 100, 25)];CSLabel.textAlignment=NSTextAlignmentLeft;CSLabel.font=[UIFont systemFontOfSize:14];CSLabel.text=@"標簽"; }?
規范示例
#pragma mark ---規范示例 Coding Guidelines for Cocoa-- 代碼越簡潔越明確越好,但是不能因為簡潔而導致語義不明確: 代碼 評價 insertObject: atIndex: 好 insert:at: 不明確,什么被插入?at指什么 removeObjectAtIndex: 好 removeObject: 好,沒有之前討論的那些問題 remove: 不明確,什么被移除了通常,不要縮寫對象的名稱。即使它們很長,也全拼: 代碼 評價 destinationSelection 好 destSel 不明確 setBackgroundColor: 好 setBkgdColor: 不明確 --你可能認為某些縮寫是眾所周知的。但凡是無絕對,尤其是當開發者和你文化、語言背景不一樣,看這些縮寫就可能產生歧義。?
良好的編程風格
多使用字面量語法,少用與之等價的方法(縮短源碼長度,更為易讀)
良好的風格:(字面量語法)NSArray *names = @[@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul"];NSDictionary *productManagers = @{@"iPhone" : @"Kate", @"iPad" : @"Kamal", @"Mobile Web" : @"Bill"};NSNumber *shouldUseLiterals = @YES;NSNumber *intNumber=@1;NSNumber *floatNumber=@2.5f;//取值NSString *name=names[1];NSString *product=productManagers[@"iPhone"];?
不良的風格:NSArray *names = [NSArray arrayWithObjects:@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul", nil];NSDictionary *productManagers = [NSDictionary dictionaryWithObjectsAndKeys: @"Kate", @"iPhone", @"Kamal", @"iPad", @"Bill", @"Mobile Web", nil];NSNumber *shouldUseLiterals = [NSNumber numberWithBool:YES];NSNumber *intNumber = [NSNumber numberWithInt:1];NSNumber *floatNumber = [NSNumber numberWithFloat:2.5f];\//取值NSString *name=[names objectAtIndex:1];NSString *product=[productManagers objectForKey:@"iPhone"];?
?
其他
性能優化
1.用? DLOG(<#...#>)代替 NSLog(...)
2.必要時使用懶加載
3.重用
?
代碼片段
熟練使用代碼片段庫可以提高編碼的速度。 Xcode4 中,打開一個項目并讓右側編輯區可視,然后點擊右側底部面板的第四個 {} 圖標,打開代碼片段庫,你可以將常用的代碼拖入其中。以下是一個最新的開源代碼片段庫鏈接:
https://github.com/mattt/Xcode-Snippets
?
參考資料
[1] 《 NYTimes Objective-C Style Guide 》 https://github.com/NYTimes/objective-c-style-guide
[2]?? https://github.com/VincentSit/NYTimes-Objective-C-Style-Guide-ZH (紐約時報 移動團隊 Objective-C 規范指南)
[3]?? https://github.com/Chinamobo/iOS-Team-Norms (Chinamobo iOS 團隊規范)
薦?Objective-C編碼規范:26個方面解決iOS開發問題
?
轉載于:https://www.cnblogs.com/sixindev/p/4444705.html
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的关于手思3.0 代码规范的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TCP的ACK确认系列 — 快速确认
- 下一篇: Google Code Jam Roun