一、使用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 团队规范)