编码规范很重要,毕竟你的代码除了你,还有很多人可能需要阅读。遵守一个编码规范,可以使你的代码易于理解和维护。
使用编码规范是个基础技能,采用谁家的编码规范比较好呢?看你给谁工作了。对OC,苹果、google都有自己的一套编码规范,估计其他公司也都有自己成行的编码规范。
google家写过一个被广泛接受的C++编码规范,他家的oc编码规范是结合了苹果家的oc规范和他自家的c++规范。所以对于iOS新手,我觉得先了解一下苹果家的编码规范比较好。
苹果家的编码规范Coding Guidelines for Cocoa。
简单翻译了下:
代码名称基础
基本原则
清晰
- 又清晰又简洁是最好的了,但简洁不如清晰重要
- 总的讲不要使用单词的简写,除了非常非常常用的简写以外(Acceptable Abbreviations and Acronyms),尽量使用单词全称,长点儿不要紧
- API的名称不要有歧义,一看你的API就知道是以什么方式做了什么事情,不要让人有疑问
一致性
做某个事情代码通常都叫这个名字,比如tag、setStringValue,那么你也这么叫。你在不确定怎么起名字的时候,可以参考一些常用的名字:Method Arguments
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
前缀
前缀一般是2到3个大写之母,可以用来给类、协议、函数、常量、typedef结构起名字时用。但不要给方法用,方法存在的命名空间是类定义的。也不要给结构体的字段使用(the fields of a structure)//没明白是啥意思?
Prefix | Cocoa Framework |
---|---|
NS | Application Kit |
NS | Foundation |
AB | Address Book |
IB | Interface Builder |
字体排版规范
1 多个词在一起时,不要使用标点符号(包括下划线、斜杠等),一般词首字母大写即可。
具体到方法名,第一个词首字母小些,后面的词首字母大写,不要用前缀;
fileExistsAtPath:isDirectory:
函数名、常量名使用相关联的类的同样的前缀,后面跟着的词首字母大写。
NSRunAlertPanel NSCellDisabled
2 避免使用下划线来命名私有方法名(要是命名一个实例变量名是可以的),这算是Apple的保留写法,如果使用了可能会和已存在的函数重名。
类和协议名
类名中应该包含一个名词来说明这个类(或者类的对象)是做什么的。并且这个雷鸣应该有个合适的前缀。例如NSString、NSDate、NSButton、UIApplication等等。
协议应该按照他们的行为命名
1 多数协议是一组方法的集合,并不是专门为了某个类服务的。这类协议的命名要区别于类的命名样子,一般都是加个ing
NSLocking | Good |
---|---|
NSLock | Poor (seems like a name for a class) |
2 还有一些协议是把一些没啥关系的方法放在一起,这种协议一般是协助一个类。这种情况下,这种协议可以和类名一样。例子就是NSObject。
头文件
1 定义一个独立的类或协议,这时类名和h文件名一样
Header file | Declares |
---|---|
NSLocale.h | The NSLocale class. |
2 定义关联的一些类或协议,一般使用最初最基本的那个类的名字
Header file | Declares |
---|---|
NSString.h | NSString and NSMutableString classes. |
NSLock.h | NSLocking protocol and NSLock, NSConditionLock, and NSRecursiveLock classes. |
3 包含Framework的头文件,使用framework的名字+.h,包含这个framework的公共头文件。
Header file | Framework |
---|---|
Foundation.h | Foundation.framework. |
4 给另外一个framwork中的类增加API时,应该延用原始类的名字。例如NSBundleAdditions.h header file of the Application Kit
5 相关联的函数和数据类型在一起时,使用一个最贴切的名字做头文件。例如NSGraphics.h (Application Kit),包含了相关的函数、常量、结构体、数据类型等。
以上是基础的明明规则,在苹果家的代码规范中,接下来分别介绍了方法命名、函数命名、属性和数据类型命名。新手都应该好好阅读下。
最后还专门为framework开发者提供了一些Tips和Techniques。有兴趣的童鞋也可好好阅读下。