2017总结-iOS OC - 编码规范

2017系列

Posted by poos on June 8, 2018

补充的

在2017年时候总结的编码规范

一个项目主代码只允许一种编码风格

命名规范

类命名

首字母大写,之后每个单词首字母都大写 使用能够反映类功能的名词短语 文件和类同名 举例:BaseClient、ImageStore

特殊类命名

如果是视图控制器的子类应添加后缀“ViewController”或者“Controller”;视图的子类应添加后缀“View”;… 举例:SettingsViewController、NavigationView

分类(类别)命名

与类命名相同,此外需添加要扩展的类名和“+” 举例:NSString+URLEncoding

协议(委托)命名

与类命名相同,此外需添加“Delegate”后缀 举例:ReplyViewDelegate

方法命名

首字母小写,之后每个单词首字母都大写 方法名使用动词短语 举例:- (void)setPostValue:(int)value

方法参数命名

首字母小写,之后每个单词首字母都大写 具有足够的说明性 不需要添加类型前缀(dicUserInfo) 举例:- (void)sendUserInfo:(NSDictionary *)userInfo

变量命名

首字母小写,之后每个单词首字母都大写 具有足够的说明性 成员变量添加“_”前缀

常量命名

常量(预定义,局部常量等)使用小写k开头的驼峰法 举例:kInvalidHandle , kWritePerm

枚举类型命名

首字母大写,之后每个单词首字母都大写,最后加“s” 枚举变量使用枚举类型去掉“s”作为前缀,每个单词首字母大写,中间不允许加下划线 举例: typedef enum UIControlEvents{ UIControlEventTouchDown, UIControlEventTouchUpInside }UIControlEvents;

图片命名

使用英文,首字母小写,之后每个单词首字母都大写 添加模块名作为前缀,避免冲突 图片应该与类文件一样,按模块分组放置

分组命名

分组要跟实际的文件夹一致(右键finder找得到) 使用英文,首字母大写,之后每个单词首字母都大写 每个分组使用模块的名字 分离共用分组 分离第三方分组 分离宏 分离资源文件

书写规范

注释

if 判断后要加括号 文件都包含文件头,要说明文件名、作者、创建时间、变更记录 .h的方法重要方法属性要添加注释 变量命名规范,不能自注释要添加注释 public接口的每个方法都应该添加关于函数,参数,返回值以及副作用的注释 当if语句的判断条件复杂时,需要用注释说明判断内容 接口类的头文件每个方法前都应该注明方法的作用和接口传参类型参数

方法

初始化方法传参推荐采用initWithXxx, 并添加注释, 提示option 私有的变量在.m文件创建分类然后声明, 不要在.h文件开放过多属性 代码相同的注意封装, 避免相同的代码段在多个地方出现

留一个空格在-或+和返回类型之间,但参数列表里的参数之间不要留间隔,每个冒号之前都必须有对该参数的说明词,如: 举例:- (void)doSomethingWithString:(NSString *)string number:(int)num 如果参数过多,推荐每个参数各占一行。使用多行的情况下,在参数前加冒号用于对齐,如: 举例: -(void)doSomethingWith:(GTMFoo *)theFoo rect:(NSRect)theRect interval:(float)theInterval

其他规范

  • 每次上传代码必须处理警告,每次上线前要通过analyzing

特别注意

登录用户的信息要有一个类专门管理 项目共用组件如分享,时间选择,播放器,提示框弹出等应组件化处理,命名规则”项目名Kit” 所有的textfield和textview要创建父类并继承,方便处理允许输入表情等,统一父类管理 可以使用字典代替model但是关键点要判空 控件布局使用相对坐标从上到下, 关键距离使用宏或者类静态变量 使用数组取某个值要判断数组count(例如data[2]要判断datasouth.count>2) 避免使用用通知, 确需要使用要写清楚注释,调用类并且应考虑接受之后是否注销通知 禁止滥用各个UI控件的accessibility属性 点击按钮之后需要切换按钮图片,当这两张图片没有关联时(关联:正常按钮图片和选中效果图片; 不关联:保存按钮图片和上传按钮图片),不应该设置为UIControlSelected 禁止使用xx.alpha = 0/1来代替view的hidden view的视图创建和赋值要分两个方法

代码风格

代码缩进和换行 操作符前后都要加空格 语句嵌套层次不得超过3层 代理必须试用#pragma mark标记

  • 逻辑处理和ui(例如弹框提醒)不要写到一个方法中

  • 不要让一个类耦合太多的东西, 分离用户, 公告组件, 执行MVC 每个实现文件建议在500行以内,不能超过1000行,超过之后应考虑通过抽象类对代码进行重构, 以及及时删除或注释掉无用的代码

项目性能优化

状态栏,tabbar,navBar的样式及是否显示在viewWillAppear调用, 耗时操作考虑在viewDidAppear调用 tableView不需要reload全部的话尽量reload一组或者一行 tableView如果高度不同要注意保存高度 UITableViewCell里面的network client都要委托出来 合理使用单例类, 例如 共享用户保存信息, 单例相机优化性能等…