所以我有一张覆盖着MKPolygonViews堆的地图。当我把一对夫妇放在它上面时,如果我将它们全部放在系统上,则将一个didReceiveMemoryWarning发送到我通过删除叠加层来响应的系统。
现在我想知道在发生这种情况时它实际使用了多少内存,它只有10MB实内存和100MB虚拟内存。当时的SMS应用程序使用30MB的内存并且运行正常。还有其他应用程序,如使用超过我的应用程序的邮件。 SpringBoard上升5MB,所以没什么特别的。这也在iPhone 4上运行,因此应该有足够的内存(我的计算大约仍然是256MB)。
删除覆盖后,内存占用量仅下降约1MB,当我将其重新打开时,它会上升1MB,因此没什么异常。
那是怎么回事?内存警告是否来自图形内存或其他东西?这些叠加的性能是否受到图形处理器的限制?随着它们全部打开,它在移动时确实使用了大约60%,但这并不能解释糟糕的性能。
对此答案的任何指示都将不胜感激。
编辑:Springboard虚拟内存上升到450MB,打开覆盖层,一旦达到512MB,就会发出内存警告。这是什么引起了这个问题?总VM总是高于512MB,因此必须使用VM的闪存存储,因此不应引起内存警告
答案 0 :(得分:1)
解决方案是将所有MKPolygonViews合并为一个MKpolygonView。更多详细信息可以在here
找到答案 1 :(得分:0)
您应该通过仅显示当前地图上实际可见的叠加视图来优化该代码。为用户不看的地图区域添加叠加视图是没有意义的。
答案 2 :(得分:0)
我注意到的一件事是,仅仅从mapview中删除叠加层(如mkpolygon)是不够的。至少有两件事没有发生......
这会导致许多问题,特别是如果您可能使用多个大型叠加层。我做了一些事情来抵消这一点。
这是我能够设法更改屏幕上多边形覆盖的唯一方法,干净地清除旧多边形,并强制释放内存。
如果有更好,更有效的方法来做所有这些,我当然愿意接受建议!