四、協(xié)議與分類
23.通過委托與數(shù)據(jù)源協(xié)議進行對象間通信
“委托模式”的主旨是:定義一套接口瘾杭,若對象想接受另一個對象的委托诫肠,則需遵從此接口奥务,以便成為其“委托對象”(delegate)泄私。而這“另一個對象”則可以給其委托對象回傳一些信息,也可以在發(fā)生事件時通知委托對象备闲。
注意:delegate屬性需定義成weak晌端,若用strong定為“擁有關(guān)系”,會導(dǎo)致“保留環(huán)”(retain cycle)恬砂。
用optional關(guān)鍵字表示為“可選的”咧纠,而且在調(diào)用可選方法前,必須提前使用類型查詢方法判斷這個委托對象能否響應(yīng)相關(guān)選擇子泻骤。
當(dāng)某對象需要從另外一個對象中獲取數(shù)據(jù)時漆羔,可以使用委托模式,也即數(shù)據(jù)源協(xié)議狱掂。
若有必要演痒,可實現(xiàn)含有位段的結(jié)構(gòu)體,將委托對象是否能響應(yīng)相關(guān)協(xié)議方法這一信息緩存至其中趋惨。
24.將類的實現(xiàn)代碼分散到便于管理的數(shù)個分類中
使用分類機制把類的實現(xiàn)代碼劃分成易于管理的小塊鸟顺。
將應(yīng)該視為“私有”的方法歸入名叫Private的分類中,以隱藏實現(xiàn)細(xì)節(jié)器虾。
25.總是為第三方類的分類名稱加前綴
向第三方類中添加分類時讯嫂,總應(yīng)給其名稱和方法名加上你專用的前綴。
26.勿在分類中聲明屬性
在分類中添加屬性兆沙,雖然我們可以在getter和setter方法用runtime來實現(xiàn)欧芽,但是正確的做法是把所有屬性都定義在主接口里。
27.使用“class-continuation分類”隱藏實現(xiàn)細(xì)節(jié)
本質(zhì):如果不想對外公開葛圃,就在.m文件里聲明屬性千扔、定義方法。
1.通過“class-continuation分類”向類中新增實例變量装悲。
2.如果某屬性在主接口聲明為“只讀”昏鹃,而類內(nèi)部又要用設(shè)置方法去修改此屬性,那么在“class-continuation分類”中將其擴展為“可讀寫”诀诊。
3.把私有方法的原型聲明在“class-continuation分類”里面洞渤。
4.如果想類所遵循的協(xié)議不被人知道,可以在“class-continuation分類”中聲明属瓣。
28.通過協(xié)議提供匿名對象(id類型)
1.協(xié)議可在某種程度上提供匿名類型载迄。具體的對象類型可以淡化為總從某協(xié)議的id類型讯柔,協(xié)議里規(guī)定了對象所應(yīng)實現(xiàn)的方法。
2.使用匿名對象來隱藏類型名稱护昧。
3.如果具體類型不重要魂迄,重要的是能響應(yīng)特定的方法,那么可以使用匿名對象來表示惋耙。