分类
dev

Objective-C编码规范

Objective-C Coding Standard | Objective-C编码规范

Version 1.0.0
Author Luo Yu
Date Friday, June 24, 2016

本标准的制定参考了Apple官方文档Cocoa Programming Guidelines,Raywenderlich.com Objective-C style guide,Google's Objective-C Coding Standard。

空格

对齐

关于对齐方式,请永远使用Tab,而非空格。

页宽

Page Guide设置为120。
Objective-C的常用长命名方式,再加之当今显示器有更宽的显示范围,这里将页宽调整为120。
可以在Xcode->Preferences->Text Editing->Editing中修改。

请移除行尾多余的空格。

变量

对象类型与*号之间空格,其他不空格。如:
NSString *oneString;

属性声明时,@property后空格,)后空格,对象类型与*号之间空格,其他不空格。如:
@property (nonatomic, strong) NSString *aString;

方法声明

方法类型符号后空一格,返回类型的括号后与方法名之间不空格。如:
- (void)someMethod;
+ (void)someClassMethod;

方法命名时,传参冒号前后都不空格。如:
- (void)someMethod:(NSString *)aString andColor:(UIColor *)aColor;

方法名较长,或参数过多而需换行显示时,优先采取冒号对齐方式。例如:
- (void)someMethodWithParameterOne:(int)paramOne
andParameterTwo:(int)paramTwo;

如冒号对齐无法对齐时,可采用左对齐。

方法调用

空格的采用方式和方法声明时保持一致,冒号前后都无空格。如:
[theObject someMethodWithParameter:1 andParameterTwo:2];

多行调用也与声明的对齐规则一样,优先采用冒号对齐。如:
[theObject someMethodWithParameter:1
          andParameterTwo:2];

关于调用方法时,语法空格的理解。

这是一条最简单Objective-C调用方法时的语法,
[object callMethod];
对象 调用 方法,中间有一个空格。

所以一个连环调用:
[[object callMethodOne] callMethodTwo];
相当于object2 = [object callMehtodOne];
然后有[object2 callMethodTwo];

所以一个不合规范的写法:
[[object callMethodOne]callMethodTwo];
无异于[object2callMethodTwo];
这种不规范的空格简直不能忍。

代码组织

方法分类

使用#pragma mark来分类方法,该标记能在Xcode的代码编辑器中梳理展示。
- 会产生水平分割线
| 可退一格

命名

沿用Objective-C的长命名方式,不推荐缩写。如:
UIImage *caseIconImage;
而不推荐:
UIImage *caseIcoImg;

使用全大写的Prefix。
类名,常量名都应该使用此种Prefix开头。如:
LYObject

常用语法格式

条件语句

if后空格,)后也空格,{不换行。如:
if (!error) {
    // do something ...
}

if语句总是使用{},即使只有一行代码。

else和while遵循同样的规则,在同一行起始{,在新一行结束}。

三元判断时,条件部分使用括号包括。如:
(val == NO) ? case1 : case2;
三元判断语句请勿嵌套使用。

switch语句

switch语句总包含default情况。
switch的case中,总是使用{}包含。

枚举

使用SDK推荐的NS_ENUM()创建枚举类型。避免在Cocoa/Cocoa Touch中使用CF C风格的enum。例如:
typedef NS_ENUM(NSInteger, LYCellType) {
    LYCellTypeHeader,
    LYCellTypeNormal,
    LYCellTypeDisabled,
    LYCellTypeFooter,
};

常量

推荐使用FOUNDATION_EXPORT配合const指定常量,或是static配合const。

尽量避免使用#define的方式。

注释

推荐必要的注释。

注释根据项目要求添加。

为了防止文本文件的编码解码导致的乱码,注释推荐使用英文,但不强制。