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

首先说一说解藕的思想。说白了就是把某些可以独立出来的模块拿出来看做单独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]

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,767评论 0 9
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,886评论 18 139
  • 阮一峰《未来世界的幸存者》读后感 前两天读了阮一峰老师的文集《未来世界的幸存者》,读完五味杂陈,有很多感触却不知从...
    陆半农阅读 4,963评论 8 25
  • 淡黄色的光罩散去,一切又恢复了原状,我和长门都不可思议地盯着我们握在一起的手。 “长门,”那个叫做小楠的女忍者很是...
    章瑾熙阅读 593评论 0 3
  • 词法分析把源代码转换成单词流。 词法部分与正则文法相对应,读取前缀几个字符就可以区分是什么单词。特别设计时会让词法...
    小小青蛙不怕风吹雨打阅读 744评论 0 0