我有一个 iOS 应用程序,它在 UIWebView 中使用 Google Maps Javascript API 显示地图。似乎在 iOS 7.0 中,UIWebView 实现发生了一些变化,导致地图对象在不再有任何引用时不会被释放。
使用 XCode 内存分析器,我看到每次创建地图时 RAM 都会增加 7-20 MB。删除地图并清除对它的引用不会减少内存使用量。内存警告似乎不会触发 Javascript 垃圾收集。在物理设备上运行代码时,应用程序会记录内存警告并且不可避免地会崩溃。
这里有一些简化的 Javascript 演示了这个问题:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title></title>
<style type="text/css" media="screen">
body { padding-top: 20px;}
#container { width:100%; height:200px; }
#container > div { height: 100%; width: 100%; }
</style>
<script type="text/javascript"
src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" charset="utf-8">
var domEl;
function createMap() {
var container = document.getElementById( 'container' );
// Create fresh dom element
//
if( domEl ) {
container.removeChild( domEl );
console.log('removed old dom element');
}
domEl = document.createElement( 'div' );
container.appendChild( domEl );
// Create map
//
var mapOptions = {
center: new google.maps.LatLng( -34.397, 150.644 ),
zoom: 8,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
new google.maps.Map( domEl, mapOptions );
return false;
}
</script>
</head>
<body>
<a href="#" onclick="createMap();">Create map</a>
<div id="container"></div>
</body>
</html>
有没有人见过这个?有人可以建议修复或解决方法吗?在这种情况下,我必须使用 Google Maps API;本机解决方案不是一种选择。