iOS开发规范基础版

2,118 阅读3分钟

1. 命名规范

1.1. 通用命名规则

一般情况下,通用命名规则适用于常量、变量、属性、参数、方法、函数等。当然也有例外,下面我们会针对于每一种情况一一列举。

l 自我描述性

命名必须具有自我描述性,杜绝中文拼音、过度缩写、或者无意义的命名方式。

l 禁止自我指涉

自我指涉是指在变量末尾增加了自己类型的一个后缀。

l 驼峰命名方式

变量、属性、参数、方法的名称采用小写字母开头的驼峰命名方式。

举例

命名

说明

insertObject:atIndex

规范的写法

insert:at

不清晰,插入什么?at代表什么?

1.2. Method命名规范

方法名也要采用小写字母开头的驼峰命名方式,如果方法名以一个中所周知的大写缩略词开头(比如HTTP),该规则可以忽略。

禁止使用下划线“_”开头

1.3. Accessor命名规范

暂无

1.4. Delegate方法命名规范

以触发消息的对象名开头,省略类名前缀并且首字母小写,除非delegate方法只有一个参数,即触发delegate方法调用的delegating对象,否则冒号是紧跟在类名后面的。

举例

- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row;

- (BOOL)applicationOpenUntitledFile:(NSApplication *)sender;

1.5. Category命名规范

避免category中的方法覆盖系统方法,可以使用前缀来区分系统方法和category方法,但前缀不要仅仅使用下划线”_“。

1.6. Class命名规范

class的名称应该由两部分组成,前缀+名称。即class的名称应该包含一个前缀和一个名词。

1.7. Protocol命名规范

如果protocol只是声明了一堆相关方法,并不关联class,以protocol结尾;如果proctocol不仅声明了一堆相关方法,还关联了某个class,以delegate结尾。

举例

NSObjectProtocol

UITableViewDelegate

1.8. Constant命名规范

对于整型常量,使用枚举创建;对于浮点型常量,使用const修饰符创建。

2. 编码规范

2.1. Block规范

调用block时需要对block判空,注意block潜在的引用循环。

2.2. UI规范

如果想要获取window,不要使用view.window获取。请使用[[UIApplication sharedApplication] keyWindow]。

2.3. 线程规范

不可变集合(比如NSArray)类默认是线程安全的,而可变集合类(比如NSMutableArray)不是线程安全的。禁止在多线程环境下直接访问可变集合对象中的元素。应该先对其进行copy,然后访问不可变集合对象内的元素。

2.4. 分支语句规范

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:。

2.5. 懒加载规范

l 一个对象的创建依赖于其他对象。

l 一个对象在整个app过程中,可能被使用,也可能不被使用。

l 一个对象的创建需要经过大量的计算或者比较消耗性能。

除以上三条之外,请不要使用懒加载。

懒加载本质上就是延迟初始化某个对象,所以,懒加载仅仅是初始化一个对象,然后对这个对象的属性赋值。懒加载中不应该有其他的不必要的逻辑性的代码,如果有,请把那些逻辑性代码放到合适的地方。

2.6. 多线程规范

l 禁止使用GCD的dispatch_get_current_queue()函数获取当前线程信息。

l 禁止在非主线程中进行UI元素的操作。

l 如果需要进行大文件或者多文件的IO操作,禁止主线程使用,必须进行异步处理。

2.7. 注释规范

l 非私有方法必须添加注释

l 工具类等提供给大家共同使用的必须有详细注释