组件化分层的意义:git
组件的颗粒度划分以下:(注意:必须是上层依赖下层,不能够平行层之间互相依赖,若是平行层之间有依赖的必要性,那么应该把公共的部分,下沉到下一个层次,再进行依赖)github
面试
当咱们的项目用cocoapod进行三方库的管理时候,咱们的项目下层依赖就会cocoapod,那么咱们的项目是怎样查找到须要使用的三方库(好比AFNetWorking)呢?,以下图,咱们cocoapod的本地库中,在master/specs下后面的0/a里面放着咱们来下的的三方的一些信息和索引,当咱们须要目标三方库的时候咱们specs下子目录中进行匹配,找到响应的三方库的连接,跳转github进行下拉到本地供咱们使用。由于咱们组件化也是使用cocoapod进行管理的,因此这里建党讲解一下使用原理。json
在咱们的电脑上新建一个目录:好比我新建---组件化,而后咱们好比要写一个宏定义和分类的组件(个人这组件命名:LGMacroAndCategoryModule),在终端中cd 到咱们要新建组件的目录下,写命令 pod lib create 组件名,而后终端就会从github下拉一个组件化的模版当当前的目录下,以后命令提示入下图跟着敲写便可,新建成功会running出这个新建项目来。缓存
数据结构
咱们关闭刚才新建成功后running出来的项目,以下图打开其目录,在class中放入咱们组件化的代码文件。架构
在刚才目录中example下,在终端cd 到此目录下,咱们执行pod install 命令后,咱们在example下打开项目,咱们就能够看到刚才的组件化文件,就显示出来了。
app
以下图文件是咱们刚才新建的组件的信息存在podfile中。工具
如上步骤1中,咱们新建另外一个组件,让后依赖上一个组件后,以下图我当在新建的组件中配置一些依赖信息操做,才能运行和使用。组件化

当咱们组件中须要用到一些图片资源,咱们怎么把图片资源放在组件中呢,好比咱们组件就是在一个viewcontroller中用一个imageView显示一张图片,在咱们刚才放代码的同级目录有一个Assets,咱们能够把咱们的图片资源放在这个目录下,以下图
咱们运行事后,发现图片仍是没有加载出来,因此咱们就没法直接使用imageWithName去加载图片了,咱们须要修改一下获取图片资源的路径,以下图,咱们经过bundle中获取刚才放进去的图片进行显示。
固然咱们还须要在以下的项目中,对资源的路径进行配置,记得修改完成后进行pod install。
当咱们的项目须要导入json文件时,放在以下图所示的目录中。
而后在使用到josn文件的代码中,进行以下图所示的路径配置。
当咱们的项目中有xib文件的时候,也须要以下图,对获取路径进行修改配置。
当前你们广泛使用通信方式有3种,CTMediator,阿里开发的BeeHive,还有路由通信方式。
模块之间的通信须要借助中间层,CTM层,A B 2个控制器见通信时候需借助CTM层,通信须要传递一些参数,也在CTM中,须要接受这+消息体,也就target action params,
咱们在中间层为何使用签名的方式和invocation,由于这样能够直接对参数进行invocation的赋值,而使用 target perform方法只能对对象操做并且也没法直接赋值还要进行间接操做,比较麻烦。
咱们一般不会直接使用CTM,在CTM 到目标控制器之间咱们还会,给目标控制器分离出一个action的业务层,进行业务和数据操做,同时咱们也不会直接使用ctm咱们像对afn的二次封装同样,防止之后CTM跟新后对整个项目的影响,我对CTM新建出一个分类进行这样的隔离,以下图中所示。咱们模块和控制器之间的通信咱们使用CTM action的分类进行的。这个分类我为了便捷使用咱们通常也会作成组件来使用。
BeeHive 是点对多的组件化通信,咱们使用appdelegate中不少功能会在其余页面中用到,appdelegate 重要的方法,allication didfinsh中咱们须要对参数application 和 launchoption 进行保存,appdelegate没有主动下发的能力,咱们须要创建manager接受appdelegate的功能,对其主动下发,须要用context对其参数进行保存,Mprotocal是业务消费层。
保存信息:
管理者主动下发:
MProtocol 事件具体处理 消费层
在具体的模块功能层,遵循协议 具备使用协议功能的权利
A控制器中的内容没法获取,class目标层也没法获取,咱们经过中间层manager层进行通信。咱们A中protocol层暴露出来的service中者所需的action,target,protocol和目标class是绑定的,能够经过动态内存中获取也能够静态的文件中获取。
从接口层拿到vc 进行通信
动态获取,缓存里面创建的绑定 拿出来的
上面是拿,如今是存,
经过mach-o 文件中 获取data数据段 和section中动态获取,想要详细了解这块须要具有底层的基础。
组件化的探索就到这里了,但愿和各位大佬小白守望互进,若是对各位看官老爷有点帮助的话,能够多多点赞啊。