iOS Cordova:Cordova是否在多次调用objective-C插件时创建多个实例?
我正在开发基于Cordova的iOS混合应用程序。我们有一个Objective-C插件文件(MyPlugin.h和MyPlugin.m),它通常是CDVPlugin的一个子类 我们从如下的JavaScript文件中调用objective-C插件iOS Cordova:Cordova是否在多次调用objective-C插件时创建多个实例?,ios,cordova,plugins,cordova-plugins,Ios,Cordova,Plugins,Cordova Plugins,我正在开发基于Cordova的iOS混合应用程序。我们有一个Objective-C插件文件(MyPlugin.h和MyPlugin.m),它通常是CDVPlugin的一个子类 我们从如下的JavaScript文件中调用objective-C插件 cordova.exec(success, error, "MyPlugin", "callNativeActivity", args); 这里,success-success回调函数, 错误-错误回调函数 和args-参数数组 下面是本机插件方法签名
cordova.exec(success, error, "MyPlugin", "callNativeActivity", args);
这里,success-success回调函数,
错误-错误回调函数
和args-参数数组
下面是本机插件方法签名
-(void)callNativeActivity:(CDVInvokedUrlCommand *)cdvCommand;
我们正在插件类内异步启动NSURLConnection任务。所以,它将等待来自web服务器的响应。收到响应后,我们将其作为CDVPluginResult对象发送回JavaScript
if (isSuccess) {
CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:jsonPayload];
[self.commandDelegate sendPluginResult:result callbackId:cdvCommand.callbackId];
}else{
CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:jsonPayload];
[self.commandDelegate sendPluginResult:result callbackId:cdvCommand.callbackId];
}
在少数情况下,我们需要从JavaScript同时多次调用插件(而不必等待插件类的响应)
如果我们多次调用,Cordova将如何处理。它会干扰我发送回JavaScript的响应吗?我知道Cordova有不同的回调ID用于发送插件结果。但是,是否有可能将我的响应发送到错误的实例?
希望我的问题清楚!!如有任何建议,将不胜感激。规范:
为每个插件的生命周期创建一个插件对象实例
UIWebView。插件通常在第一次引用时实例化
通过JavaScript调用。否则,它们可以通过
在config.xml文件中将名为onload的参数设置为true
这意味着,每个CordovaApp/WebView只有一个插件实例
通过ID正确处理回调
它是这样工作的(不确定真正的实现):
- 每次调用
时,都会生成一个回调IDcordova.exec(…)
- 应用程序映射到回调[ID]={成功,错误}
- 您的本机代码调用onSuccess(ID),将调用success
- 调用onSuccess或onError后,回调[ID]设置为null
在现实世界中,也可能有一些进度侦听器,但它们也应该使用正确的callback-ID。感谢您添加了大量有用的信息!!正如你所说,一个插件只有一个实例。这意味着,当我多次调用插件时,每次都会调用相同的插件方法(在我的例子中,它是callNativeActivity:)(使用不同的回调ID)。那么,如果我在插件方法中进行一些耗时的操作或计算,该怎么办呢。下次从JavaScript调用插件时,它会被覆盖吗?希望我能澄清我的疑虑。我不理解你的问题。如果你自己写一个插件,它需要某种线程安全。不要在插件实例中存储变量,因为这些变量不会在所有请求中共享。您需要将所有内容存储在callback-ID的上下文中。