参考链接
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