- 代码格式
- 使用空格而不是制表符Tab
- 每一行的最大长度
- 函数的书写
- 函数调用
- @public和@private标记符
- 协议(Protocols)
- 闭包(Blocks)
- 数据结构的语法糖
代码格式
使用空格而不是制表符Tab
不要在工程里使用Tab键,使用空格来进行缩进。在Xcode > Preferences > Text Editing将Tab和自动缩进都设置为4 个空格。( Google的标准是使用两个空格来缩进,但这里还是推荐使用Xcode默认的设置。 )
每一行的最大长度
同样的,在Xcode > Preferences > Text Editing > Page guide at column:中将最大行长设置为80 ,过长的一行代码将会导致可读性问题。
函数的书写
一个典型的Objective-C函数应该是这样的:
\- (void)writeVideoFrameWithData:(NSData *)frameData timeStamp:(int)timeStamp {
在-和(void)之间应该有一个空格,第一个大括号{的位置在函数所在行的末尾,同样应该有一个空格。( 我司的C语言规范要求是第一个大括号单独占一行,但考虑到OC较长的函数名和苹果SDK代码的风格,还是将大括号放在行末。 )
如果一个函数有特别多的参数或者名称很长,应该将其按照:来对齐分行显示:
-(id)initWithModel:(IPCModle)model
在分行时,如果第一段名称过短,后续名称可以以Tab的长度(4个空格)为单位进行缩进:
\- (void)short:(GTMFoo *)theFoo
函数调用
函数调用的格式和书写差不多,可以按照函数的长短来选择写在一行或者分成多行:
//写在一行
以下写法是错误的:
//错误,要么写在一行,要么全部分行
@public和@private标记符
@public和@private标记符应该以一个空格 来进行缩进:
@interface MyClass : NSObject {
协议(Protocols)
在书写协议的时候注意用<>括起来的协议和类型名之间是没有空格的,比如IPCConnectHandler()<IPCPreconnectorDelegate>,这个规则适用所有书写协议的地方,包括函数声明、类声明、实例变量等等:
@interface MyProtocoledClass : NSObject<NSWindowDelegate> {
闭包(Blocks)
根据block的长度,有不同的书写规则:
* 较短的block可以写在一行内。
* 如果分行显示的话,block的右括号}应该和调用block那行代码的第一个非空字符对齐。
* block内的代码采用4个空格 的缩进。
* 如果block过于庞大,应该单独声明成一个变量来使用。
* ^和(之间,^和{之间都没有空格,参数列表的右括号)和{之间有一个空格。
//较短的block写在一行内
数据结构的语法糖
应该使用可读性更好的语法糖来构造NSArray,NSDictionary等数据结构,避免使用冗长的alloc,init方法。
如果构造代码写在一行,需要在括号两端留有一个空格,使得被构造的元素于与构造语法区分开来:
//正确,在语法糖的"[]"或者"{}"两端留有空格
如果构造代码不写在一行内,构造元素需要使用两个空格 来进行缩进,右括号]或者}写在新的一行,并且与调用语法糖那行代码的第一个非空字符对齐:
NSArray *array = @[
构造字典时,字典的Key和Value与中间的冒号:都要留有一个空格,多行书写时,也可以将Value对齐:
//正确,冒号':'前后留有一个空格
