編寫高質(zhì)量iOS和OS X代碼的52個有效方法
本篇博客主要是自己的一些筆記,如果要了解詳細(xì),還請閱讀書本。推薦?。。?/p>

第一章筆記 ?(書中提到的class-continuation分類是指.m文件的私有擴(kuò)展,并非category)
1. 盡量用@class來做”向前聲明”,在需要的時候import
減少使用者引入的頭文件數(shù)量,如果引用的頭文件用不到,會增加編譯時間;
import還有可能導(dǎo)致循環(huán)引用的問題
2. 協(xié)議的遵守最好放在類的私有擴(kuò)展當(dāng)中
3. 關(guān)于oc中的協(xié)議
和java中的接口類似 ?,用于對象之間相互通信的同時,又能解耦;
委托模式的遵旨:定義一套接口,代理對象遵守此接口。原來對象就可以給代理回傳一些信息,也可以在發(fā)生相關(guān)事件時通知代理;
此模式可以講數(shù)據(jù)和業(yè)務(wù)邏輯解耦; 例如 “數(shù)據(jù)源” 和 “委托” ?。
聲明代理用weak,避免保留環(huán)的形成;因為一般情況代理對象會持有原對象;
設(shè)計方法時一般將原來對象傳給代理; 這樣代理能根據(jù)實(shí)例執(zhí)行不同的代碼;
緩存委托對象,如果協(xié)議中的方法都是可選的,那么程序中可能會有一大堆, responseToSelector,這時候可以把某個委托對象是否能夠響應(yīng)某個協(xié)議緩存起來;優(yōu)化程序效率;
自己總結(jié):用該模式來實(shí)現(xiàn)不同對象間的異步通信;比如網(wǎng)絡(luò)請求,不知道什么時候回來;一些UI事件不知道什么時候觸摸時;該模式在通信時是低耦合的,代理一般是id;
4. 多用字面量 少用與之等價的方法
多用NSString *someStr = @"abcd"; 少用NSString *someStr2 = [NSString stringWithFormat....];NSNumber NSArray NSDictionary都是如此
代碼整潔 便于閱讀 ?沒有多余的語法成分
數(shù)組用字面量的好處:
id obj1 = /…/
id obj2 = /…/
id obj3 = /…/
NSArray *arrA = [NSArray arrayWithObjects: obj1, obj2, obj3, nil];
NSArray *arrB = @[obj1, obj2, obj3]
// 上邊的代碼中如果obj2是nil,arrB會拋出異常,原因是數(shù)組中有空對象;而arrA數(shù)組中只有obj1一個對象,原因是通過方法創(chuàng)建數(shù)據(jù),結(jié)束標(biāo)志就是nil;
局限性: 利用字面量創(chuàng)建可變版本時候需要拷貝一份
NSMutableArray *mutable = [@[@1, @2, @3] mutableCopy]
5. 多用類型常量 少用#define
利用static和extern來管理作用域
// .h文件
extern NSString *const SomeStr;
// .m 文件
NSString *const someStr = @"someStr";
6. 用枚舉表示狀態(tài) 選項 狀態(tài)碼 ?
每個枚舉值可以用1<<0, 1<<1,來賦值;這樣用"按位或操作符"組合多個枚舉的二進(jìn)制值;例如系統(tǒng)的UIViewAutoresizing.
如果用枚舉表示狀態(tài)機(jī),在switch語句中最好不要有default語句.