首先說(shuō)一說(shuō)解藕的思想巡语。說(shuō)白了就是把某些可以獨(dú)立出來(lái)的模塊拿出來(lái)看做單獨(dú)app開(kāi)發(fā)。分别。遍愿。把一個(gè)大團(tuán)隊(duì) 分解成小團(tuán)隊(duì)。便于管理提高效率耘斩。
那言歸正傳沼填,思想呢 就是有多對(duì)多(網(wǎng)狀結(jié)構(gòu))分解成多對(duì)一(輻射結(jié)構(gòu))
其中方案很多。今天我們來(lái)一起探討下面對(duì)協(xié)議編程思想的結(jié)構(gòu)方式括授。
備用知識(shí)請(qǐng)查看下OC的運(yùn)行時(shí)runtime中消息轉(zhuǎn)發(fā)的forwardingTargetForSelector方法坞笙。
其中核心就是把所有需要的類都用一個(gè)類來(lái)代替,然后用這個(gè)類調(diào)用的方法荚虚。當(dāng)然這個(gè)代替的類并沒(méi)有實(shí)現(xiàn)這個(gè)類調(diào)用的方法薛夜。就會(huì)調(diào)用消息轉(zhuǎn)發(fā)forwardingTargetForSelector。我們?cè)趂orwardingTargetForSelector方法中給這個(gè)類的方法的實(shí)現(xiàn)曲管。
為代碼
例如[loginObj login]; ?[logoutObj logout]却邓;
轉(zhuǎn)化后[<@protocol>publicObj login]; [<@protocol>publicObj logout];
然后publicObj沒(méi)有實(shí)現(xiàn)login方法。我們就會(huì)在 publicObj forwardingTargetForSelector 中為此方法實(shí)現(xiàn)院水。
說(shuō)到這感覺(jué)可能還是比較模糊腊徙。简十。那么我們來(lái)寫個(gè)demo 上代碼!
首先是一個(gè)單例基類MBaseInterface.h
然后是MBaseInterface.m
在app delegate中注冊(cè)你要加載的模塊
然后
主要就是給interface.iml復(fù)制給相關(guān)的<protocol>類(其中該類中實(shí)現(xiàn)protocol里面的方法)
準(zhǔn)備工作做完后:我們來(lái)看看調(diào)用吧
首先拿到
寫個(gè)宏先
第一句話是拿到模塊管理類(單例)
第二句話是通過(guò)模塊管理類拿到模塊
第三句話是通過(guò)協(xié)議名字拿到iface(是上一段代碼字典的反操作)
//2016.9.5 注釋上面一行撬腾,改用如下解耦的方式
GETIFACE(iface, MDownloadManagerProtocol, DownLoadModuleName);
[iface aSelector]
這樣就可以了C!由于時(shí)間原因 暫時(shí)寫這么多?
寫的還不夠清晰民傻。胰默。還有有不明白的可以留言 我會(huì)即時(shí)回復(fù) 一起學(xué)習(xí)探討!