2

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 を使用する必要があります。ネイティブ ソリューションはオプションではありません。

4

0 に答える 0