国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

第3章接口與API設(shè)計(jì)52條筆記

2019-11-14 18:20:12
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

第3章 接口與API設(shè)計(jì) 52條筆記

第15條: 用前綴避免命名空間沖突

Objective-C 沒(méi)有其他語(yǔ)言那種內(nèi)置的命名空間機(jī)制 。鑒于此,我們?cè)谄鹈麜r(shí)要設(shè)法避免潛在的命名沖突,否則很容易就重名了。如果發(fā)生命名沖突 naming clash ,那么應(yīng)用程序的連接過(guò)程就胡出錯(cuò)。

避免此問(wèn)題的唯一做法就是變相實(shí)現(xiàn)命名空間:為所有名稱都加上適當(dāng)?shù)那熬Y。

?

第16條: 提供全能初始化方法

把這種可為對(duì)象提供必要信息以便其能完成工作的初始化方法就做 指定初始化方法 designated initialzier.

如果創(chuàng)建實(shí)例的方法不止一種,那么這個(gè)類就會(huì)有多個(gè)初始化方法。不過(guò)要在其中選定一個(gè)作為designated initializer ,令其他初始化方法都來(lái)調(diào)用它。

上面幾個(gè)初始化方法中,initWithTimeIntervalSinceReferenceDate:是 designated initializer.

?

第23條:通過(guò)委托與數(shù)據(jù)源協(xié)議進(jìn)行對(duì)象間通信

該模式的主旨是 : 定義一套接口,某對(duì)象若想接受另一個(gè)對(duì)象的委托,則需要遵從此接口,以便成為其委托對(duì)象 delegate.而這另一個(gè)對(duì)象則可以給其委托對(duì)象回傳一些信息,也可以在發(fā)生相關(guān)事件時(shí)通知委托對(duì)象。

?

一般通過(guò)協(xié)議 這項(xiàng)語(yǔ)言特性來(lái)是實(shí)現(xiàn)此模式,整個(gè)Cocoa系統(tǒng)框架都是這么做的。

第24條: 將類的實(shí)現(xiàn)代碼分散到便于管理的數(shù)個(gè)分類之中

類中經(jīng)常容易填滿各種方法,而這些方法的代碼則全部堆在一個(gè)巨大的實(shí)現(xiàn)文件中。

通過(guò)Objective-C的分類機(jī)制,把類代碼按邏輯劃入幾個(gè)分區(qū)中,這對(duì)開(kāi)發(fā)與調(diào)試都有好處。

?

把個(gè)人信息建模為類。

可以用分類機(jī)制把剛才的類改寫成下面這樣:

現(xiàn)在,類的實(shí)現(xiàn)代碼按照方法分成了好幾個(gè)部分。所以說(shuō),這項(xiàng)語(yǔ)言特性當(dāng)然就叫做分類 啦 。

使用分類機(jī)制之后,依然可以把整個(gè)類都定義在一個(gè)接口文件中,并將其代碼寫在一個(gè)實(shí)現(xiàn)文件中。可是隨著分類數(shù)量增加,當(dāng)前這份實(shí)現(xiàn)文件很快就會(huì)膨脹。此時(shí),可以把每個(gè)分類提取到各自的文件中去。

以EOCPerson為例,可以按照其分類分成以下幾個(gè)文件:

通過(guò)分類機(jī)制,可以把類代碼分成很多易于管理的小塊,以便單獨(dú)檢視 。使用分類機(jī)制之后,如果想用分類中的方法,那么要記得在引入EOCPerson.h時(shí)一并引入分類的頭文件。

雖然稍微有點(diǎn)麻煩,不過(guò)分類仍然是一種管理代碼的好方法。

第25條:總是為第三方的分類名稱加前綴。

第26條: 勿在分類中聲明屬性

屬性是封裝數(shù)據(jù)的方式。盡管從技術(shù)上說(shuō),分類也可以聲明屬性,但這種做法應(yīng)該盡量避免。

關(guān)聯(lián)對(duì)象能夠解決在分類中不能合成實(shí)例變量的問(wèn)題。

這樣做可行,但不太理想。要把相似的代碼寫很多遍,而且在內(nèi)存管理問(wèn)題上容易出錯(cuò),因?yàn)槲覀冊(cè)跒閷傩詫?shí)現(xiàn)存取方法時(shí),經(jīng)常會(huì)忘記遵從其內(nèi)存管理語(yǔ)義。

盡管這個(gè)方法不壞,但筆者不推薦。

把屬性定義在主接口中要比定義在分類里清洗得多。

至于分類機(jī)制,則應(yīng)將其理解為一種手段,目標(biāo)在于擴(kuò)展類的功能。

有時(shí)候只讀屬性還是可以在分類中使用的。

由于獲取方法并不訪問(wèn)數(shù)據(jù),而且屬性也不需要由實(shí)例變量來(lái)實(shí)現(xiàn),所以可以像下面這樣來(lái)實(shí)現(xiàn)分類:

第27條: 使用class-continuation 分類 隱藏實(shí)現(xiàn)細(xì)節(jié)

第28條:通過(guò)協(xié)議提供匿名對(duì)象

協(xié)議定義了一系列方法,遵從此協(xié)議的對(duì)象應(yīng)該實(shí)現(xiàn)他們。于是,我們可以用協(xié)議把自己所寫的API只中的實(shí)現(xiàn)細(xì)節(jié)隱藏起來(lái),將返回的對(duì)象設(shè)計(jì)為遵從此協(xié)議的純id 類型。

在定義受委托者 delegate這個(gè)屬性時(shí),可以這樣寫

@PRoperty (nonatomic ,weak )id <EOCDelegate>delegate;

由于該屬性的類型是id<EOCDelegate>,所以實(shí)際上任何類的對(duì)象都能充當(dāng)這一屬性,即便該類不繼承自NSObject也可以,只有遵循EOCDelegat協(xié)議就行。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 合川市| 徐水县| 河源市| 南雄市| 礼泉县| 荣成市| 乐陵市| 阿克苏市| 化州市| 布尔津县| 武城县| 同心县| 吉木萨尔县| 龙川县| 永城市| 平阳县| 乾安县| 疏勒县| 乌鲁木齐县| 剑河县| 五河县| 三河市| 通江县| 上栗县| 松桃| 南投市| 托克逊县| 乌拉特前旗| 昌图县| 安庆市| 遂川县| 大同市| 定边县| 叙永县| 泸溪县| 仪征市| 泸定县| 赤壁市| 双牌县| 达孜县| 邯郸市|