我正在为iOS和Android编写自定义相机插件,因为默认设置不提供我需要的功能。
我想要实现的是在后台从相机检索图像而不显示预览屏幕/窗口,以便可以从Javascript请求它们并直接在HTML中使用或通过HTTP POST在Base64中发布。 (还有一些尚未准备好的事情:))
我实际上已经管理过了,我在这里上传了我的插件: https://github.com/Moonware/cordova-cameraplus
Android上的功能正如预期的那样,但我在iOS上遇到了问题(可能是内存泄漏)。
它工作3-4分钟,内存不断增加,突然停止刷新(应用程序仍处于活动状态,Camera对象也是如此)。
由于ARC已启用,因此我无法自行手动释放/处置某些对象。我试图用@autoreleasepool {}包装一些看起来具有战略意义的地方,内存使用情况略好一些,但问题仍然存在。
我想知道是否有一位Objective C专家可以查看我的插件,并且可能提供一些建议来解决这个问题,或者至少找到它的来源。
我觉得这是每隔50-100ms调用插件来检索占用内存并且不释放它的图像的事实(返回的字符串介于8kb和2Mb之间,具体取决于相机的分辨率) :
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:base64String];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
但即使停止刷新和相机,即使CPU使用率降低,内存也永远不会释放。
为了有希望激励某人查看代码,我在这里准备了一个简单且易于使用的Ionic项目: https://github.com/Moonware/cordova-cameraplus-testapp
正常抓住这个之后,你只需要做到这一点:
cordova platform add ios (or android)
ionic build ios (or android)
也许有更好的方法。无论如何,欢迎提出建议:)
我已经意识到(当然是在创建了我自己之后)我不是第一个有这个想法的人,但是看看现有的变体并没有帮助我解决这个问题。
我试过的那些显然有类似的记忆问题。
提前致谢。