2

我有一个 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>

我还在GitHub 上发布了一个完整的 XCode 项目

有没有人见过这个?有人可以建议修复或解决方法吗?在这种情况下,我必须使用 Google Maps API;本机解决方案不是一种选择。

4

0 回答 0