我正在开发一个使用cordova(2.1)和一些自定义插件的iOS应用程序。
我要面对的问题如下: 当我展示我的插件时(基本上是一个具有比内置更多功能的相机插件) cordova插件)有时我会收到内存警告并随后卸载 包含webview的视图。这对我来说是一个非常大的问题,因为曾经是我的imagePicker 被解雇的webview没有恢复。
我看了一下CDVCamera插件源代码,我注意到了这一点:
(1)插件保存webview:
// we need to capture this state for memory warnings that dealloc this object
cameraPicker.webView = self.webView;
这里我不明白发生了什么,好吧我们保存webview以防万一 警告它将被卸载,但我无法弄清楚webview框架中的方式/位置 恢复了。
(2)该插件使用一个名为hasPendingOperation的Bool属性,这个属性如果我理解的话 当收到内存警告时,CDVViewController使用它来避免清除内存 如果插件处于活动状态。
我不理解的第一件事就是以下为什么当我的控制器收到内存警告时 超级控制器(CDVViecontroller)不接收它?
其次,可以将CDVCamera插件使用的模式与CDVViewController结合使用 处理自定义插件中的内存警告?
使用cordova管理内存警告以避免webview被卸载有任何帮助,我们将不胜感激。
答案 0 :(得分:1)
这可能是一个遗留用途,我们需要保留对webView的引用,以便在选择器被解除时向其编写javascript。不是真的需要,因为我们使用不同的方式回写webview:https://github.com/apache/cordova-ios/blob/0a978a6617c58bfa98968e0c6bdcdb4f10f01902/CordovaLib/Classes/CDVCamera.m#L301
不确定您的意思,CDVViewController也会收到内存警告,并查询每个插件的hasPendingOperation属性。如果设置为true,则不会取消分配插件。请注意,如果内存未充分释放,iOS看门狗可能会终止应用程序。