一、使用CocoaPods類庫管理工具。CocoaPods安裝和使用教程。git
二、下載安裝註釋插件VVDocumenter-Xcode。github
3.使用代碼對齊的Xcode插件objective-c
XAlign:XALign 編程
ClangFormat ClangFormat-Xcode性能優化
4.快速進入沙盒目錄網絡
ZLGotoSandboxPlugin:查看沙盒的插件,當運行模擬器的時候,Shift + Common + w 直接查看當前模擬器下程序的沙盒。app
#pragma mark -關於手思3.0對於文件的目錄要按以下結構建立: -CategoryEx(全部類別類擴展放在裏面) -HelpMacro(項目宏定義) -Resources (全部圖片資源,聲音文件,其餘資源,相應資源放入相應組(Group)中) -Utilities (工具集合,網絡請求,工具類,第三方庫等) -MobileSiBuControllers(全部項目模塊代碼文件) -CustomUI (自定義UI控件) -引用外部文件或者某個單獨的功能時,放在單獨的組中
關於手思3.0規範要點ide
1.命名規範(詳見下文) 2.全部控制器繼承BaseViewController 如:@interface HomeViewController : BaseViewController
3.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進行字典模型自動轉換,因此屬性名與後臺保持一致便可
一、變量首字母小寫,後面單詞首字母大寫,如userPassWord
二、使用可以反映類功能的名詞短語(使用英文翻譯)
3.命名時帶上類型,如xxxTv,xxxView,xxxStr等
四、文件名應包含描述繼承的類,如:文件名:BaseViewController 類:UIViewController
全部類名,接口名(Protocol)均以大寫字母開頭,多單詞組合時,後面的單詞首寫字母大寫。
如:@interface LoginViewCotroller : UIViewController View--全部擴展自UIView的類以View結尾,如: GridView,StarView,OpenGLView,EmojiPageView。 ViewController-全部擴展自UIViewController的類以ViewController結尾, Model--全部數據Model以Model結尾 如 HomePageViewControler, LoginViewController。 若是名稱太長則以VC結尾:如 AllPicturePreviewVC
四、自定義控件命名,以相應類名爲後綴命名。
對於UI相關的變量,命名時要後綴以特定的控件名,如UILabel的變量命名爲xxxLabel,xxxCell,其餘的如xxxButton,xxxTableView,xxxImageView等;
常見類型簡寫以下: UIViewController:VC UIImage:Img UIImageView:Iv UIView:View UILabel:Lbl UIButton:Btn UINavigationBar:NBar UIToolBar:TBar UISearchBar:SBar UITextField:TF UITextView:Tv NSArray:Array NSMutableArray:MArray NSDictionary:Dict NSMutableDictionary:MDict NSString:Str NSMutableString:MStr NSSet:Set NSMutableSet:MSet
(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; //錯
當參數過長時,每一個參數佔用一行,以冒號對齊。如:
-(void)saveUserInfo:(NSMutableDictionary *)dict userName:(NSString *)name passWord:(NSString *)pwd{ ... }
(6).點擊事件響應(下面幾種寫法均可以)
-(void)loginButtonClicked (不推薦) -(void)loginButtonClicked:(id)sender (推薦) 或 -(void)loginButtonAction -(void)loginButtonAction:(UIButton *)sender -(void)backBtnAction:(id)sender 手勢事件 - (void)handleTapGesture:(UITapGestureRecognizer *)tapGesture
以 get
、set
開頭的方法有特殊的意義,不要隨意定義。
set
開頭,可用 setup
替代。userInfomation
,而不是 getUserInfomation
。
#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 團隊規範)