Effective Objective-C2.0讀書筆記 開篇


編寫高質(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語句.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容