【问题标题】:Handling memory Management and in iOS Cordova project?处理内存管理和 iOS Cordova 项目?
【发布时间】:2015-10-04 06:10:53
【问题描述】:

谁能告诉我如何在基于 iOS Cordova 的项目中使用“收到内存警告”处理内存管理

在我的 iPhone 或 iPad(8.1 版)上运行时,我在 iOS Cordova 项目中收到此警告。我在我的应用程序中使用 CDVlocation 进行地理定位。我主要在加载基于地图的视图时收到此消息。我正在使用基于 ARC 的 Xcode 项目

如果您在使用 cordova “收到内存警告” 管理内存警告方面提供任何帮助,我们将不胜感激。

谢谢大家

【问题讨论】:

  • 您是否尝试连接 Safari 上的开发工具并检查内存输出?通常它与大图像链接或大量使用混合 CSS。
  • 我在 iPhone 设备中遇到了这个内存问题。我如何在 safari 工具中使用它?你能解释一下检查的过程

标签: ios iphone cordova memory-management maps


【解决方案1】:

当您的 iOS 应用收到Received memory warning 通知时,iOS 会尝试尽可能多地回收内存,因为某些应用需要它。该应用程序可能是您,也可能是其他人。发生这种情况时,所有当前正在执行的应用程序(不仅仅是您的应用程序)都会收到此通知,并且每个应用程序都应通过释放尽可能多的未使用内存来做出响应。由于 Javascript 自己进行内存管理,Cordova 应用程序真正可以做的就是通过将变量设置为 null(或一些小值)来取消引用内存,所以 myHugeGlobalObject = null;myArrayOfOneMillionThings = []; 等,这样垃圾收集器就可以释放下次运行时该内存。因此,当您收到Received memory warning 通知时,您应该这样做。

在 CDVPlugin.m 中,您可以执行以下操作来将 iOS 通知传递到您的 Javascript 应用程序:

 - (void)onMemoryWarning
{
   // override to remove caches, etc
    NSLog(@"CVPlugin.m: Got onMemoryWarning notification");
    NSString * javascriptString = @"yourJSFunctionToManageMemoryWarnings();";
   [self.webView stringByEvaluatingJavaScriptFromString:javascriptString];
}

然后在您的 Javascript 中(假设是 index.html):

<script>
    function yourJSFunctionToManageMemoryWarnings() {
        console.log("yourJSFunctionToManageMemoryWarnings() was called");
        myHugeGlobalObject = null;
        myArrayOfOneMillionThings = [];
    }
</script>

听起来在您的特定情况下,iOS 正在尝试使内存可用,因为它是您的应用程序需要它(为了加载地图视图),而您要做的就是您通常会做的:释放未使用的内存如上所述,当其他人也礼貌地做同样的事情时,你就会得到你的记忆。

也就是说,如果您在尝试加载地图视图时遇到超出此处描述的某种类型的内存不足情况,您可能需要研究一些高级 Javascript 内存管理技术,例如对象池 (@987654321 @) 你基本上会在启动时获取所有你期望你需要的内存,然后你知道你会在需要的时候拥有它。

【讨论】:

    【解决方案2】:

    在 CDVPlugin.m 中尝试这种方式

     - (void)onMemoryWarning
    {
       // override to remove caches, etc
        NSLog(@"onMemoryWarning");
        NSString * javascriptString = @"yourJSFunctionToManageMemoryWarnings();";
       [self.webView stringByEvaluatingJavaScriptFromString:javascriptString];
    }
    

    【讨论】:

    • @Sujania 如果您正在使用这段代码,您是否在 Javascript 中实现了 yourJSFunctionToManageMemoryWarnings() 函数,然后您是否正在做您需要做的事情来减少该函数中的内存占用?
    • @Sujania 请在下面查看我的回答,了解如何实现该功能和处理通知。谢谢。
    猜你喜欢
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    相关资源
    最近更新 更多