这篇我是从这里翻译来的:https://github.com/NYTimes/objective-c-style-guide
在苹果公司提供的以下文档中有涉及到Objective-C编码规范的方方面面,我们可以在以下文档中找到我们需要知道的Objective-C编码规范:
- The Objective-C Programming Language
- Cocoa Fundamentals Guide
- Coding Guidelines for Cocoa
- iOS App Programming Guide
点标记语法
建议使用”.”号设置和获取属性:
如:
view.backgroundColor = [UIColor orangeColor];
[UIApplication sharedApplication].delegate;
不建议:
[view setBackgroundColor:[UIColor orangeColor]];
UIApplication.sharedApplication.delegate;
间隔问题
缩进必须使用4个空格。不要使用tab键进行缩进。确保在xcode的偏好设置中设置这一偏好。
方法的大括号,以及其他的一些大括号(如if/else/switch/while等)都在声明的同一行打开,在新的一行关闭。
如:
if (user.isHappy) {
// Do something
}
else {
// Do something else
}
为了确保代码的美观整洁,以及组织性,在方法之间应该有一行空行。
方法内部的空行可以分隔功能,在这种情况下我们也许可以考虑将这个方法写成若干个更小的方法。
对于方法名冗长的方法,我们可以增加一条空白行来分离方法体与方法名。
@synthesize 和 @dynamic 每一个都应该在@implementation的新的一行中声明。
条件语句
为了避免错误,条件语句中的运行代码需要使用大括号包起来,就算可以不使用大括号的情况(例如只有一行)。否则在想为if语句执行体中添加一行新代码时,容易出错。 而且在执行体只有没有添加大括号的一行时,执行体中的那行代码被注释,导致下一行成为执行体时,情况更严重。
除此之外,这种风格与其它情况的条件语句更为一致,代码一致性,可读性更强。
例如:
if (!error) {
return success;
}
而不要使用:
if (!error)
return success;
//或者
if (!error) return success;
三元运算符
使用三元运算符 ? : 的目的在于让代码更简洁清晰。
三元运算符在每个表达式中应该只用于一个条件。如果用于多个条件会导致代码更加难以理解。
例如:
result = a > b ? x : y;
不要用成:
result = a > b ? x = c > d ? c : d : y;
错误处理
当方法通过应用返回一个error参数时, 代码必须在返回的值的基础上进行判断而不能在返回的error变量的基础上进行判断(code MUST switch on the returned value and MUST NOT switch on the error variable.--原文,不太会翻译)
例如:
NSError *error;
if (![self trySomethingWithError:&error]) {
// Handle Error
}
不能:
NSError *error;
[self trySomethingWithError:&error];
if (error) {
// Handle Error
}
因为有时候在成功的时候,一些苹果的API也会写一个垃圾值到error参数中,所以对error变量进行判断的话会导致错误判断(可能会引发后续的crash)。
方法
在方法声明中,需要在方法范围(”-“或”+”号)后面有一个空格。方法的每一节之间也应该有一个空格。
例如:
- (void)setExampleText:(NSString *)text image:(UIImage *)image;
变量
描述性地为变量命名,变量名