Effective Objective-C 2.0讀書筆記(三)

接口與API設(shè)計

我們在編寫接口時應(yīng)將其設(shè)計成易于復(fù)用的形式,這需要用到Objective-C語言中常見的編程范式(paradigm)。

15.用前綴避免命名空間沖突

Objective-C沒有其他語言那種內(nèi)置的命名空間(namespace)機制。避免此問題的唯一辦法就是變相實現(xiàn)命名空間:為所有名稱都加上適當(dāng)前綴。

使用Cocoa創(chuàng)建應(yīng)用程序時一定要注意,Apple宣稱其保留使用所有“兩字母前綴”(two-letter prefix)的權(quán)利,所以你自己選用的前綴應(yīng)該是三個字母的。

選擇與你的公司、應(yīng)用程序或二者皆有關(guān)聯(lián)之名稱作為類名的前綴,并在所有代碼中均使用這一前綴。

若自己所開發(fā)的程序庫中用到了第三方庫,則應(yīng)為其中的名稱加上前綴。

16.提供“全能初始化方法”

在類中提供一個全能初始化方法,并于文檔里指明。其它初始化方法均應(yīng)調(diào)用此方法。

若全能初始化方法與超類不同,則需覆寫超類中的對應(yīng)方法。

如果超類的初始化方法不適用與子類,那么應(yīng)該覆寫這個超類方法,并在其中拋出異常。

// Using Default values
- (id) init {
    return [self initWithWidth:5.0f andHeight:10.0f];
}

// Throwing an exception
- (id) init {
    @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Must use initWithWidth:andHeight: instead." userInfo:nil];
}

17.實現(xiàn)description方法

實現(xiàn)description方法返回一個有意義的字符串,用以描述該實例。

debugDescription方法是開發(fā)者在調(diào)試器(debugger)中以控制臺命令打印對象時才調(diào)用的。在NSObject類的默認實現(xiàn)中,此方法只是直接調(diào)用了description。

若想在調(diào)試時打印出更詳盡的對象描述信息,則應(yīng)實現(xiàn)debugDescription方法。

18.盡量使用不可變對象

若某屬性僅可于對象內(nèi)部修改,則在“class-continuation分類”中將其由readonly屬性擴展為readwrite屬性。

不要把可變的collection作為屬性公開,而應(yīng)該提供相關(guān)方法,以此修改對象中的可變collection。

19.使用清晰而協(xié)調(diào)的命名方式

起名時應(yīng)遵從標(biāo)準(zhǔn)的Objective-C命名規(guī)范,這樣創(chuàng)建出來的接口更容易為開發(fā)者所理解。

方法名要言簡意賅,從左至右讀起來要像個日常用語中的句子才好。

方法名里不要使用縮略后的類型名稱。

給方法起名時的第一要務(wù)就是確保其風(fēng)格與你自己的代碼或所要集成的框架相符。

20.為私有方法名加前綴

給私有方法的名稱加上前綴,這樣可以很容易地將其同公共方法區(qū)分開。

不要單用一個下劃線做私有方法的前綴,因為這種做法是預(yù)留給蘋果公司用的。

21.理解Objective-C錯誤模型

只有發(fā)生了可使整個應(yīng)用程序崩潰的嚴重錯誤時,才應(yīng)使用異常。

在錯誤不那么嚴重的情況下,可以指派“委托方法”(delegate method)來處理錯誤,也可以把錯誤信息放在NSError對象里,經(jīng)由“輸出參數(shù)”返回給調(diào)用者。

22.理解NSCopying協(xié)議

若想令自己所寫的對象具有拷貝功能,則需實現(xiàn)NSCopying協(xié)議。

如果自定義的對象分為可變版本與不可變版本,那么就要同時實現(xiàn)NSCopying與NSMutableCopying協(xié)議。

復(fù)制對象時需決定采用淺拷貝還是深拷貝,一般情況下應(yīng)該盡量執(zhí)行淺拷貝。

如果你所寫的對象需要深拷貝,那么可考慮新增一個專門執(zhí)行深拷貝的方法。

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

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

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