一般情况下,通用命名规则适用于常量、变量、属性、参数、方法、函数等。当然也有例外,下面我们会针对于每一种情况一一列举。
l 自我描述性
命名必须具有自我描述性,杜绝中文拼音、过度缩写、或者无意义的命名方式。
l 禁止自我指涉
自我指涉是指在变量末尾增加了自己类型的一个后缀。
l 驼峰命名方式
变量、属性、参数、方法的名称采用小写字母开头的驼峰命名方式。
举例
|
命名 |
说明 |
|
insertObject:atIndex |
规范的写法 |
|
insert:at |
不清晰,插入什么?at代表什么? |
1.2. Method命名规范
方法名也要采用小写字母开头的驼峰命名方式,如果方法名以一个中所周知的大写缩略词开头(比如HTTP),该规则可以忽略。
禁止使用下划线“_”开头
暂无
以触发消息的对象名开头,省略类名前缀并且首字母小写,除非delegate方法只有一个参数,即触发delegate方法调用的delegating对象,否则冒号是紧跟在类名后面的。
举例
避免category中的方法覆盖系统方法,可以使用前缀来区分系统方法和category方法,但前缀不要仅仅使用下划线”_“。
class的名称应该由两部分组成,前缀+名称。即class的名称应该包含一个前缀和一个名词。
如果protocol只是声明了一堆相关方法,并不关联class,以protocol结尾;如果proctocol不仅声明了一堆相关方法,还关联了某个class,以delegate结尾。
举例
NSObjectProtocol
UITableViewDelegate
对于整型常量,使用枚举创建;对于浮点型常量,使用const修饰符创建。
调用block时需要对block判空,注意block潜在的引用循环。
如果想要获取window,不要使用view.window获取。请使用[[UIApplication sharedApplication] keyWindow]。
不可变集合(比如NSArray)类默认是线程安全的,而可变集合类(比如NSMutableArray)不是线程安全的。禁止在多线程环境下直接访问可变集合对象中的元素。应该先对其进行copy,然后访问不可变集合对象内的元素。
l 对于条件语句的真假,因为 nil 解析为 NO,所以没有必要在条件中与它进行比较。永远不要直接和 YES 和 NO进行比较,因为 YES 被定义为 1,而 BOOL 可以多达 8 位。
建议
if (isAwesome)
if (![someObject boolValue])
禁止这样做
if ([someObject boolValue] == NO)
if (isAwesome == YES)
l 使用switch...case...语句的时候,不要丢掉default:。
l 一个对象的创建依赖于其他对象。
l 一个对象在整个app过程中,可能被使用,也可能不被使用。
l 一个对象的创建需要经过大量的计算或者比较消耗性能。
除以上三条之外,请不要使用懒加载。
懒加载本质上就是延迟初始化某个对象,所以,懒加载仅仅是初始化一个对象,然后对这个对象的属性赋值。懒加载中不应该有其他的不必要的逻辑性的代码,如果有,请把那些逻辑性代码放到合适的地方。
l 禁止使用GCD的dispatch_get_current_queue()函数获取当前线程信息。
l 禁止在非主线程中进行UI元素的操作。
l 如果需要进行大文件或者多文件的IO操作,禁止主线程使用,必须进行异步处理。
l 非私有方法必须添加注释
l 工具类等提供给大家共同使用的必须有详细注释