iOS7 UIWebView 内存泄漏

9
我们有一个综合性的iOS应用程序,采用混合模式 - 一个UIWebView承载主要的JS网络应用程序。它在iOS6上运行良好,但最近我们发现在所有iOS7设备 - iPad,iPhone 4/4S和iPhone 5/5C/5S上都会出现严重的内存耗尽崩溃。我们已经分析了iOS模拟器中iOS6和7的内存消耗情况。通过在应用程序中进行相同的交互,WebView 的内存消耗在 iOS6 中始终少于200MB,而在 iOS7 上可能超过800MB! 我们猜测 WebView 在 iOS7 上存在一些严重的内存管理问题。但由于缺乏分析 WebView 中 JS 的工具,我们无法定位根本原因。 在这里,我们想问是否有人遇到类似的问题,并且是否有任何工具/方法可以帮助进一步了解 UIWebView,以深入挖掘确切的问题。谢谢。

1
这似乎与https://dev59.com/8nfZa4cB1Zd3GeqPS4pQ有关。 - Mark
2个回答

1
我没有足够的声望来进行点赞或评论。所以我认为“答案”是我唯一能做出贡献的方式。
我同意Ming Zhu的观点。我发现如果你有5位数密钥(9999 < key <= 99999),在iOS 7上的内存使用会急剧增加。
以下是我尝试复制导致我的应用程序崩溃时得出的示例代码。
tempobj = {};

for(var i=1; i<2000; i++){
    var temp = {};
    tempobj[i] = temp;
    temp[98304] = "hello world";
}

在发现这个stackoverflow之前,我也向苹果提交了一个漏洞报告,但看起来这是一件好事情。


0

UIWebView和iOS7原生的Safari浏览器似乎在处理JSON对象时存在内存管理问题。如果您有一个具有深层嵌套结构的字典,并且恰好有一个键是数值字符串,其值小于99999,则可能经常收到内存警告。

类似以下情况:

 {"**98304**":
     {"key":
         {"2ndLevelKey":
             {
                "address":"10928 Homestead rd","city":"Cupertino","Zip":95014
             }
         }
     }
 }

解决方案很简单,尝试将关键字 "98304" 替换为类似 "ID98304" 的形式。 希望您已经成功解决了这个问题。 :)

这个问题什么时候能够被解决? - wawanopoulos
15476175号bug于11月14日提交给苹果,目前还没有状态更新。 - Ming Zhu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接