条件语句
条件语句体应该总是被大括号包围。
if (!error) {
return success;
}
nil 和 BOOL 检查
用感叹号来作为运算符。
if (someObject) { ...
if (!someObject) { ...
黄金大道
使用多个 return 可以避免增加循环的复杂度,并提高代码的可读性。
- (void)someMethod {
if (![someOther boolValue]) {
return;
}
//Do something important
}
三元运算符
当三元运算符的第二个参数(if 分支)返回和条件语句中已经检查的对象一样的对象的时候,下面的表达方式更灵巧:
result = object ? : [self createObject];
常量命名
应该以驼峰法命名,并以相关类名作为前缀。
static const NSTimeInterval ZOCSignInViewControllerFadeOutAnimationDuration = 0.4;
可变类型
推荐使用 NSMutableArray, NSMutableString 这样的类。
应该避免下面这样:
NSMutableArray *aMutableArray = [@[] mutableCopy];
Init 和 Dealloc
永远不要在 init (以及其他初始化方法)和dealloc方法中里面用 getter 和 setter 方法,你应当直接访问实例变量。
点符号
当使用 setter getter 方法的时候尽量使用点符号。应该总是用点符号来访问以及设置属性。例如:
view.backgroundColor = [UIColor orangeColor];
[UIApplication sharedApplication].delegate;
不要这样:
[view setBackgroundColor:[UIColor orangeColor]];
UIApplication.sharedApplication.delegate;
使用点符号会让表达更加清晰并且帮助区分属性访问和方法调用。
属性定义
- 属性可以存储一个代码块。为了让它存活到定义的块的结束,必须使用
copy
(block 最早在栈里面创建,使用copy
让 block 拷贝到堆里面去) - 描述
BOOL
属性的词如果是形容词,那么setter不应该带is
前缀,但它对应的 getter 访问器应该带上这个前缀,如:
@property (nonatomic, assign, getter=isEditable) BOOL editable;
NSNotification
// Foo.h
extern NSString * const ZOCFooDidBecomeBarNotification
// Foo.m
NSString * const ZOCFooDidBecomeBarNotification = @"ZOCFooDidBecomeBarNotification";
参考:
Objc Zen Book(禅与 Objective-C 编程艺术)
英文原址:https://github.com/objc-zen/objc-zen-book
中文翻译:https://github.com/oa414/objc-zen-book-cn
网友评论