1.頭文件的引入
-
盡量不要引入頭文件,特別是在.h文件中,最好使用向前聲明來提及其他類
image -
如果無法使用向前聲明,比如要聲明某個類遵循一項協議,或者要聲明一個枚舉.這種情況下盡量把協議和枚舉的聲明放到分類或者是一個單獨的.h文件中
image
image
2.多用字面量語法
- 應該使用字面量語法來創建字符串,數值,數組,字典.與創建此類對象的常規方法相比,這么做更簡明扼要.
- 應該通過取下標操作來訪問數組下標或字典中的鍵對應的元素
- 用字面量語法創建數組或字典時,若值中有nil,則會拋出異常,這樣會有助于查錯
類型 | 字面量語法 | 常規方法 |
---|---|---|
數值 | NSNumber *intNumber = @1; | |
數組 | NSArray *animals = @[@"cat",@"dog",@"mouse",@"badger"]; | |
字典 | NSDictionary *dict = @{@"key":@"value"}; |
類型 | 下標訪問 | 常規方法 |
---|---|---|
數組 | NSString *str = array[1]; | |
字典 | NSString *str = dict[@"key"]; | |
可變數組 | mutableArray[1] = @"value"; | |
可變字典 | mutableDict[@"key"] = mutableDict[@"value"]; |
3.多用類型常量,少用#define預處理指令
- 使用預處理指令定義常量時,這個常量不含類型信息,編譯器只是會在編譯前據此執行查找與替換操作.即使有人重新定義了常量值,編譯器也不會產生警告信息,這將導致應用程序中的常量值不一致.
#define ANIMATION_DURATION 0.3
上述預處理指令會將源代碼中的ANIMATION_DURATION字符串替換為0.3,假設此指令定義在某個頭文件中,那么導入了此頭文件的所有代碼中的ANIMATION_DURATION字符串都會被替換成為0.3,這可能會引發意想不到的問題.
此預處理指令中沒有明確指出此常量類型,duration這個詞看起來與時間有關,但沒有通過常量類型約束
static const NSTimeinterval kAnimationDuration = 0.3;
上述代碼很好的定義了一個類型為NSTiemInterval的常量,此方式包含了類型信息,這樣做清楚的描述了常量的含義.
- 在實現文件中使用static const來定義"只在編譯單元內可見的常量".此類常量不在全局符號表中,所以無需為其名稱加前綴.在OC的語境下,"編譯單元"一次通常指每個類的實現文件(.m文件).
static const NSTimeinterval kAnimationDuration = 0.3;
- 在頭文件中使用extern來聲明全局常量,并在相關實現文件中定義其值.這種常量出現在全局符號表中,所以其名稱應加以區隔,通常用與之相關的類名做前綴.
.h
extern NSString *const EOCStringConstant
.m
NSString *const EOCStringConstant = @"VALUE";
注意const在常量類型中的位置,常量定義應從右至左解讀,在本例中,EOCStringConstant就是"一個常量,這個常量是個指針,指向NSString對象"