CBBObjectChannel 2.0.5

CBBObjectChannel 2.0.5

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2017年6月

cbbYoji Suzuki 维护。



  • DWANGO Co., Ltd.

为iOS提供ObjectChannel的实现。

示例

本库的 Example 目录包含了使用WKWebView(HTML)和原生代码(Objective-c)间ObjectChannel交互生成对象、执行方法、销毁的简单示例项目。

screen-shot

要构建并运行示例,请先执行 pod install

cd Example
pod install
open Example.xcworkspace

设置

Podspec

abstract_target 'defaults' do
    pod 'CBBObjectChannel', '2.0.5'
end

使用方法

第1步: 准备 CBBObjectChannel

使用指定的 CBBFunctionChannel 实例生成 CBBObjectChannel。

    CBBObjectChannel* objectChannel = [[CBBObjectChannel alloc] initWithFunctionChannel:functionChannel];

在不使用 DataChannel 的 FunctionChannel 层的情况下,建议使用遮蔽的 CBBDirectObjectChannel

    CBBDirectObjectChannel* objectChannel = [[CBBDirectObjectChannel alloc] initWithDataBus:dataBus];

第2步: 准备类

ObjectChannel中使用的类需要像 FunctionChannel 一样,定义继承自 CBBRemoteExport 协议的协议,以便可以在远程端执行。

与 FunctionChannel 中使用的类不同之处在于,可以定义没有返回值和参数的 destroy 方法作为析构函数。

-(void)destroy;

示例

第3步: 注册类

通过使用 CBBObjectChannel#bindClass 在第2步中准备的类进行注册,远程端就可以生成对象、执行方法、销毁对象。

    [objectChannel bindClass:[MyClassObjc class]];

第4步: 实例化远程端绑定的类

可以使用 CBBObjectChannel#createRemoteObjectWithClassName 在远程端生成绑定类的实例。

    [objectChannel createRemoteObjectWithClassName:@"MyClassJS" arguments:@[@"arg1"] callback:^(CBBRemoteObject * _Nullable remoteObject) {
        self.remoteObject = remoteObject;
    }];

对象生成完成后(或失败),将调用 callback,并将生成的对象作为参数指定。

第5步:调用远程方法

可以使用 CBBRemoteObject#invoke 来调用生成对象的实现方法。

    [_remoteObject invokeWithMethod:@"foo" arguments:@[@"One", @(2), @"3"] callback:^(NSError * _Nullable error, id  _Nullable result) {
        // 呼び出しに成功時は error に nil が, result に戻り値が設定される
        // 呼び出しに失敗時は error にエラー情報が設定される
    }];

如果不需要返回值,请在 callback 中指定 nil

第6步:销毁远程对象

可以使用 CBBRemoteObject#destroy 来销毁对象。

    [_remoteObject destroy];

第7步:销毁

使用 CBBObjectChannel#destroy 可以销毁 ObjectChannel。

[objectChannel destroy];
  • 即使销毁了 ObjectChannel,也不会执行下层的 destroy(FunctionChannel、DataChannel、DataBus)。
  • 如果在 DirectObjectChannel 中使用,它将执行构造器中指定的 DataBus 高级 destroy。

许可协议