关于iOS面向协议编程—解藕

首先说一说解藕的思想。说白了就是把某些可以独立出来的模块拿出来看做单独app开发。。。把一个大团队 分解成小团队。便于管理提高效率。
那言归正传,思想呢 就是有多对多(网状结构)分解成多对一(辐射结构)
其中方案很多。今天我们来一起探讨下面对协议编程思想的结构方式。
备用知识请查看下OC的运行时runtime中消息转发的forwardingTargetForSelector方法。
其中核心就是把所有需要的类都用一个类来代替,然后用这个类调用的方法。当然这个代替的类并没有实现这个类调用的方法。就会调用消息转发forwardingTargetForSelector。我们在forwardingTargetForSelector方法中给这个类的方法的实现。
为代码
例如[loginObj login]; [logoutObj logout];
转化后[<@protocol>publicObj login]; [<@protocol>publicObj logout];
然后publicObj没有实现login方法。我们就会在 publicObj forwardingTargetForSelector 中为此方法实现。
说到这感觉可能还是比较模糊。。那么我们来写个demo 上代码!
首先是一个单例基类MBaseInterface.h


关于iOS面向协议编程—解藕
文章图片
【关于iOS面向协议编程—解藕】然后是MBaseInterface.m


关于iOS面向协议编程—解藕
文章图片
关于iOS面向协议编程—解藕
文章图片
关于iOS面向协议编程—解藕
文章图片
在app delegate中注册你要加载的模块
关于iOS面向协议编程—解藕
文章图片
然后
主要就是给interface.iml复制给相关的类(其中该类中实现protocol里面的方法)
关于iOS面向协议编程—解藕
文章图片
准备工作做完后:我们来看看调用吧
首先拿到
写个宏先
第一句话是拿到模块管理类(单例)
第二句话是通过模块管理类拿到模块
第三句话是通过协议名字拿到iface(是上一段代码字典的反操作)
关于iOS面向协议编程—解藕
文章图片
//2016.9.5 注释上面一行,改用如下解耦的方式

GETIFACE(iface, MDownloadManagerProtocol, DownLoadModuleName);
[iface aSelector]

这样就可以了!!由于时间原因 暂时写这么多
写的还不够清晰。。还有有不明白的可以留言 我会即时回复 一起学习探讨!

    推荐阅读