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的方式。
注释
推荐必要的注释。
注释根据项目要求添加。
为了防止文本文件的编码解码导致的乱码,注释推荐使用英文,但不强制。