为iOS提供ObjectChannel的实现。
本库的 Example 目录包含了使用WKWebView(HTML)和原生代码(Objective-c)间ObjectChannel交互生成对象、执行方法、销毁的简单示例项目。
要构建并运行示例,请先执行 pod install
cd Example
pod install
open Example.xcworkspace
abstract_target 'defaults' do
pod 'CBBObjectChannel', '2.0.5'
end
使用指定的 CBBFunctionChannel 实例生成 CBBObjectChannel。
CBBObjectChannel* objectChannel = [[CBBObjectChannel alloc] initWithFunctionChannel:functionChannel];
在不使用 DataChannel 的 FunctionChannel 层的情况下,建议使用遮蔽的
CBBDirectObjectChannel
。
CBBDirectObjectChannel* objectChannel = [[CBBDirectObjectChannel alloc] initWithDataBus:dataBus];
ObjectChannel中使用的类需要像 FunctionChannel 一样,定义继承自 CBBRemoteExport
协议的协议,以便可以在远程端执行。
与 FunctionChannel 中使用的类不同之处在于,可以定义没有返回值和参数的 destroy
方法作为析构函数。
-(void)destroy;
示例
通过使用 CBBObjectChannel#bindClass
在第2步中准备的类进行注册,远程端就可以生成对象、执行方法、销毁对象。
[objectChannel bindClass:[MyClassObjc class]];
可以使用 CBBObjectChannel#createRemoteObjectWithClassName
在远程端生成绑定类的实例。
[objectChannel createRemoteObjectWithClassName:@"MyClassJS" arguments:@[@"arg1"] callback:^(CBBRemoteObject * _Nullable remoteObject) {
self.remoteObject = remoteObject;
}];
对象生成完成后(或失败),将调用 callback
,并将生成的对象作为参数指定。
可以使用 CBBRemoteObject#invoke
来调用生成对象的实现方法。
[_remoteObject invokeWithMethod:@"foo" arguments:@[@"One", @(2), @"3"] callback:^(NSError * _Nullable error, id _Nullable result) {
// 呼び出しに成功時は error に nil が, result に戻り値が設定される
// 呼び出しに失敗時は error にエラー情報が設定される
}];
如果不需要返回值,请在 callback
中指定 nil
。
可以使用 CBBRemoteObject#destroy
来销毁对象。
[_remoteObject destroy];
使用 CBBObjectChannel#destroy
可以销毁 ObjectChannel。
[objectChannel destroy];
- 即使销毁了 ObjectChannel,也不会执行下层的 destroy(FunctionChannel、DataChannel、DataBus)。
- 如果在 DirectObjectChannel 中使用,它将执行构造器中指定的 DataBus 高级 destroy。