UIWebView で Google Maps Javascript API を使用して地図を表示する iOS アプリケーションがあります。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>
また、完全な XCodeプロジェクトを GitHub に投稿しました。
誰もこれを見たことがありますか?誰かが修正または回避策を提案できますか? この場合、Google Maps API を使用する必要があります。ネイティブ ソリューションはオプションではありません。