Objective-C编码规范,内容来自苹果、谷歌的文档翻译,自己的编码经验和对其它资料的总结。
转载请注明出处。
概要
Objective-C是一门面向对象的动态编程语言,主要用于编写iOS和Mac应用程序。关于Objective-C的编码规范,苹果和谷歌都已经有很好的总结:
本文主要整合了对上述文档的翻译、作者自己的编程经验和其他的相关资料,为公司总结出一份通用的编码规范。
代码格式
使用空格而不是制表符Tab
不要在工程里使用Tab键,使用空格来进行缩进。在Xcode > Preferences > Text Editing
将Tab和自动缩进都设置为4个空格。(Google的标准是使用两个空格来缩进,但这里还是推荐使用Xcode默认的设置。)
每一行的最大长度
同样的,在Xcode > Preferences > Text Editing > Page guide at column:
中将最大行长设置为80,过长的一行代码将会导致可读性问题。
函数的书写
一个典型的Objective-C函数应该是这样的:
1 2 3 |
- (void)writeVideoFrameWithData:(NSData *)frameData timeStamp:(int)timeStamp { ... } |
在-
和(void)
之间应该有一个空格,第一个大括号{
的位置在函数所在行的末尾,同样应该有一个空格。(我司的C语言规范要求是第一个大括号单独占一行,但考虑到OC较长的函数名和苹果SDK代码的风格,还是将大括号放在行末。)
如果一个函数有特别多的参数或者名称很长,应该将其按照:
来对齐分行显示:
1 2 3 4 5 6 7 8 9 10 11 |
-(id)initWithModel:(IPCModle)model ConnectType:(IPCConnectType)connectType Resolution:(IPCResolution)resolution AuthName:(NSString *)authName Password:(NSString *)password MAC:(NSString *)mac AzIp:(NSString *)az_ip AzDns:(NSString *)az_dns Token:(NSString *)token Email:(NSString *)email Delegate:(id<IPCConnectHandlerDelegate>)delegate; |
在分行时,如果第一段名称过短,后续名称可以以Tab的长度(4个空格)为单位进行缩进:
1 2 3 4 5 6 |
- (void)short:(GTMFoo *)theFoo longKeyword:(NSRect)theRect evenLongerKeyword:(float)theInterval error:(NSError **)theError { ... } |
函数调用
函数调用的格式和书写差不多,可以按照函数的长短来选择写在一行或者分成多行:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//写在一行 [myObject doFooWith:arg1 name:arg2 error:arg3]; //分行写,按照':'对齐 [myObject doFooWith:arg1 name:arg2 error:arg3]; //第一段名称过短的话后续可以进行缩进 [myObj short:arg1 longKeyword:arg2 evenLongerKeyword:arg3 error:arg4]; |
以下写法是错误的:
1 2 3 4 5 6 7 8 9 10 |
//错误,要么写在一行,要么全部分行 [myObject doFooWith:arg1 name:arg2 error:arg3]; [myObject doFooWith:arg1 name:arg2 error:arg3]; //错误,按照':'来对齐,而不是关键字 [myObject doFooWith:arg1 name:arg2 error:arg3]; |
@public和@private标记符
@public和@private标记符应该以一个空格来进行缩进: