• 代码格式
    • 使用空格而不是制表符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对齐: //正确,冒号':'前后留有一个空格