條件語句
條件語句體應該總是被大括號包圍。
if (!error) {
return success;
}
nil 和 BOOL 檢查
用感嘆號來作為運算符。
if (someObject) { ...
if (!someObject) { ...
黃金大道
使用多個 return 可以避免增加循環(huán)的復雜度,并提高代碼的可讀性。
- (void)someMethod {
if (![someOther boolValue]) {
return;
}
//Do something important
}
三元運算符
當三元運算符的第二個參數(shù)(if 分支)返回和條件語句中已經(jīng)檢查的對象一樣的對象的時候,下面的表達方式更靈巧:
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;
使用點符號會讓表達更加清晰并且?guī)椭鷧^(qū)分屬性訪問和方法調用。
屬性定義
- 屬性可以存儲一個代碼塊。為了讓它存活到定義的塊的結束,必須使用
copy(block 最早在棧里面創(chuàng)建,使用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