美文网首页iOS-Developer-OC
关于iOS面向协议编程—解藕

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

作者: 张小凡的青云志 | 来源:发表于2016-09-14 11:44 被阅读661次

首先说一说解藕的思想。说白了就是把某些可以独立出来的模块拿出来看做单独app开发。。。把一个大团队 分解成小团队。便于管理提高效率。

那言归正传,思想呢 就是有多对多(网状结构)分解成多对一(辐射结构)

其中方案很多。今天我们来一起探讨下面对协议编程思想的结构方式。

备用知识请查看下OC的运行时runtime中消息转发的forwardingTargetForSelector方法。

其中核心就是把所有需要的类都用一个类来代替,然后用这个类调用的方法。当然这个代替的类并没有实现这个类调用的方法。就会调用消息转发forwardingTargetForSelector。我们在forwardingTargetForSelector方法中给这个类的方法的实现。

为代码

例如[loginObj login];  [logoutObj logout];

转化后[<@protocol>publicObj login]; [<@protocol>publicObj logout];

然后publicObj没有实现login方法。我们就会在 publicObj forwardingTargetForSelector 中为此方法实现。

说到这感觉可能还是比较模糊。。那么我们来写个demo 上代码!

首先是一个单例基类MBaseInterface.h

然后是MBaseInterface.m

在app delegate中注册你要加载的模块

然后

主要就是给interface.iml复制给相关的<protocol>类(其中该类中实现protocol里面的方法)

准备工作做完后:我们来看看调用吧

首先拿到

写个宏先

第一句话是拿到模块管理类(单例)

第二句话是通过模块管理类拿到模块

第三句话是通过协议名字拿到iface(是上一段代码字典的反操作)

//2016.9.5 注释上面一行,改用如下解耦的方式

GETIFACE(iface, MDownloadManagerProtocol, DownLoadModuleName);

[iface aSelector]

这样就可以了!!由于时间原因 暂时写这么多 

写的还不够清晰。。还有有不明白的可以留言 我会即时回复 一起学习探讨!

相关文章

网友评论

  • hypercode:同求demo,这文章是转的别人的吗?好多东西说的不清楚,比如interface.iml是什么?好多疑问,求楼主解答
  • devRen:看了两遍还是不太明白,不太清楚 MModuleManager 和 DownloadManager 是什么,可能是我对面向协议理解不深,大佬能不能提供一下DOME。

本文标题:关于iOS面向协议编程—解藕

本文链接:https://www.haomeiwen.com/subject/xndvettx.html