Objection 统一管理对象的引用问题,我想这就是这种技术的意义吧。
废话不说,咱们直接上步骤吧:
1:协议
我们的意识里要知道,一切围绕协议来进行。
下面的协议是一个视图的协议,该协议简单到不能再简单了。
它并未暴露任何变量和接口,只是为了引用该协议对应的视图。
@protocol SearchViewCtrlProtocol<NSObject>
@end
我倾向于把一个协议单独写到一个文件里。
然后,再把所有的协议引用到同一个文件里。
最后,把该文件作为全局文件放到pch里面。
这里面遵循的原则就是:协议是共享的。
2:协议对应的类实现
在该例子中就是一个视图,当然要遵循该协议。
3:注册协议对应的类
Objection既然是要解决对象的引用问题,那么通过协议,它要把对象注册进来。
怎么实现?
3.1:Objection通过JSObjectionModule来实现。
@interface SearchViewCtrlModule : JSObjectionModule
@end
@implementation SearchViewCtrlModule
- (void)configure
{
[self bindClass:SearchViewCtrlModule class] toProtocol:@protocol(SearchViewCtrlProtocol)];
}
@end
3.2:添加进Objection:
JSObjectionInjector *injector = [JSObjection defaultInjector];
injector = injector ? : [JSObjection createInjector];
injector = [injector withModule:[[SearchViewCtrlModule alloc] init]];
[JSObjection setDefaultInjector:injector];
4:使用
JSObjectionInjector *injector = [JSObjection defaultInjector];
UIViewController <SearchViewCtrlProtocol> *vc = [injector getObject:@protocol(SearchViewCtrlProtocol)];