iOS 团队编程规范

前 言

  • 需求是暂时的,只有变化才是永恒的,面向变化编程,而不是面向需求编程。
  • 不要过分追求技巧,降低程序的可读性。
  • 简洁的代码可以让bug无处藏身。要写出明显没有bug的代码,而不是没有明显bug的代码。
  • 先把眼前的问题解决掉,解决好,再考虑将来的扩展问题。

一、命名规范

1、统一要求

含义清楚,尽量做到不需要注释也能了解其作用,若做不到,就加注释,使用全称,不使用缩写。

2、类名

大驼峰式命名:每个单词的首字母都采用大写字母

==例:== MFHomePageViewController

3、私有变量

  • 私有变量放在 .m 文件中声明
  • 以 _ 开头,第一个单词首字母小写,后面的单词的首字母全部大写。

==例:== NSString *_somePrivateVariable

4、property变量

  • 小驼峰式命名:第一个单词以小写字母开始,后面的单词的首字母全部大写
  • 属性的关键字推荐按照 原子性,读写,内存管理的顺序排列。
  • BlockNSString属性应该使用copy关键字
  • 禁止使用synthesize关键词

==例:==

5、宏和常量命名

  • 对于宏定义的常量
    • #define 预处理定义的常量全部大写,单词间用 _ 分隔
    • 宏定义中如果包含表达式或变量,表达式或变量必须用小括号括起来。
  • 对于类型常量
    • 对于局限于某编译单元(实现文件)的常量,以字符k开头,例如kAnimationDuration,且需要以static const修饰
    • 对于定义于类头文件的常量,外部可见,则以定义该常量所在类的类名开头,例如EOCViewClassAnimationDuration, 仿照苹果风格,在头文件中进行extern声明,在实现文件中定义其值

==例:==

6、Enum

  • Enum类型的命名与类的命名规则一致
  • Enum中枚举内容的命名需要以该Enum类型名称开头
  • NS_ENUM定义通用枚举,NS_OPTIONS定义位移枚举

==例:==

7、Delegate

  • delegate做后缀,如
  • optional修饰可以不实现的方法,用required修饰必须实现的方法
  • 当你的委托的方法过多, 可以拆分数据部分和其他逻辑部分, 数据部分用dataSource做后缀. 如
  • 使用didwill通知Delegate已经发生的变化或将要发生的变化。
  • 类的实例必须为回调方法的参数之一
    1. 回调方法的参数只有类自己的情况,方法名要符合实际含义
    2. 回调方法存在两个以上参数的情况,以类的名字开头,以表明此方法是属于哪个类的

==例:==

8、方法

  • 方法名用小驼峰式命名
  • 方法名不要使用new作为前缀
  • 不要使用and来连接属性参数,如果方法描述两种独立的行为,使用and来串接它们。
  • 方法实现时,如果参数过长,则令每个参数占用一行,以冒号对齐。
  • 一般方法不使用前缀命名,私有方法可以使用统一的前缀来分组和辨识
  • 方法名要与对应的参数名保持高度一致
  • 表示对象行为的方法、执行性的方法应该以动词开头
  • 返回性的方法应该以返回的内容开头,但之前不要加get,除非是间接返回一个或多个值。
  • 可以使用情态动词(动词前面can、should、will等)进一步说明属性意思,但不要使用dodoes,因为这些助动词没什么实际意义。也不要在动词前使用副词或形容词修饰

==例:==

二、代码注释规范

优秀的代码大部分是可以自描述的,我们完全可以用代码本身来表达它到底在干什么,而不需要注释的辅助。

但并不是说一定不能写注释,有以下三种情况比较适合写注释:

  • 公共接口(注释要告诉阅读代码的人,当前类能实现什么功能)。
  • 涉及到比较深层专业知识的代码(注释要体现出实现原理和思想)。
  • 容易产生歧义的代码(但是严格来说,容易让人产生歧义的代码是不允许存在的)。

除了上述这三种情况,如果别人只能依靠注释才能读懂你的代码的时候,就要反思代码出现了什么问题。

最后,对于注释的内容,相对于“做了什么”,更应该说明“为什么这么做”

1、import注释

如果有一个以上的import语句,就对这些语句进行分组,每个分组的注释是可选的。

2、属性注释

写在属性之后,用两个空格隔开
==例:==

3、方法声明注释:

一个函数(方法)必须有一个字符串文档来解释,除非它:

  • 非公开,私有函数。
  • 很短。
  • 显而易见。

而其余的,包括公开接口,重要的方法,分类,以及协议,都应该伴随文档(注释):

  • 以/开始
  • 第二行是总结性的语句
  • 第三行永远是空行
  • 在与第二行开头对齐的位置写剩下的注释。

建议这样写:

方法的注释使用Xcode自带注释快捷键:Commond+option+/
==例:==

4、代码块注释

单行的用//+空格开头,多行的采用/* */注释

5、TODO

使用//TODO:说明 标记一些未完成的或完成的不尽如人意的地方

==例:==

三、代码格式化规范

1、指针*位置

定义一个对象时,指针*靠近变量

==例:== NSString *userName;

2、方法的声明和定义

在 - 、+和 返回值之间留一个空格,方法名和第一个参数之间不留空格

==例:==

3、代码缩进

  • 不要在工程里使用 Tab 键,使用空格来进行缩进。在 Xcode > Preferences > Text Editing 将 Tab 和自动缩进都设置为 4 个空格
  • MethodMethod之间空一行
  • 一元运算符与变量之间没有空格、二元运算符与变量之间必须有空格

==例:==

4、对method进行分组

使用#pragma mark -method进行分组

5、大括号写法

  • 对于类的method:左括号另起一行写(遵循苹果官方文档)
  • 对于其他使用场景(if,for,while,switch等): 左括号跟在第一行后边

==例:==

6、property变量

==例:==

四、编码规范

1、if语句

①、须列出所有分支(穷举所有的情况),而且每个分支都须给出明确的结果。

==推荐这样写:==

==不推荐这样写:==

②、不要使用过多的分支,要善于使用return来提前返回错误的情况,把最正确的情况放到最后返回。

==推荐这样写:==

==不推荐这样写:==

③、条件过多,过长的时候应该换行。条件表达式如果很长,则需要将他们提取出来赋给一个BOOL值,或者抽取出一个方法

==推荐这样写:==