关于Objection 框架或解耦合方案

参考链接

http://www.cocoachina.com/industry/20140416/8174.html

https://github.com/atomicobject/objection

https://github.com/appsquickly/Typhoon

在 github上 出现了 这2个比较受欢迎的框架模式

---

关于objection

example

step1 注册绑定类(返回实例对象)

load 函数 是在'镜像' 加载的时候 执行(先于main()函数调用!!!),也就是在整个app生命周期 只执行一次

@protocol(AViewControllerProtocol) 仅仅依据它作为key 和对象绑定

bindClass实现 其实就是 根据class生成临时obj (class基本描述信息) ,用obj和key绑定

当同一个@protocol(AViewControllerProtocol)和多个class绑定,需要通过named来区分

疑问?:app启动的时候 会有很多AModule对象

step2 使用对象

尽管是通过@protocol(AViewControllerProtocol)生成的组合字符串作为key 和AViewController绑定,

实际上 AViewController并不一定遵循并实现AViewControllerProtocol

--- ---

绑定实例对象

注意:当使用实例对象 和协议 进行绑定时,TView必须遵循协议,objection源码中做了校验

--- 绑定MetaClass (返回MetaClass)

至此,我接受objection能满足我的需要 模块间解耦;花点心思,我们再来仔细瞧瞧它

作者提供的例子 乍一看 没懂,其实是这样的

当通过objection来获取对象,会帮你初始化engine 、 breaks   且并没有@import "Engine.h"

--- ---

关于provider

使用

实现

--- ---

关于一个类 有多个初始化 函数 该怎么办?

上面的provider貌似 是一种可行的方式,但是要在参数中进行区分改调用那个初始化函数

看下作者提供的

1,使用 (这里在使用处,将有个警告!!!,因为 xcode分析器 不知道 @selector在哪里)

也就是作者的Ad-Hoc Initializer

2,必要实现 (也就是 你得先'注册'初始化函数)

---

作者提供的自定义参数函数  getObjectWithArgs 并不会默认走 

还是走的是init方法

getObjectWithArgs 作用仅仅是根据 objection_requires绑定后 初始化属性

--- 也就是 还是得显示的调用initWithParas:para2

原文地址:https://www.cnblogs.com/xzoscar/p/4991763.html