在 MKMapView 中释放缓存

Posted

技术标签:

【中文标题】在 MKMapView 中释放缓存【英文标题】:release cache in MKMapView 【发布时间】:2018-11-13 20:52:08 【问题描述】:

我有一个基于地图的应用程序,它使用 MKMapView 作为主视图。 当我的 iPad 连接到 Xcode 时,我可以在调试导航器中看到在地图周围缩放和平移时内存使用量不断增加。我想 ios 正在缓存地图图块,但不会在 MkMapView 被销毁之前释放它们。

有没有办法强制 MkMapView 清除所有缓存?

如果我继续平移和缩放我的应用程序最终会在内存使用量为 3Gb 时崩溃。

【问题讨论】:

How to clear the cache of mkmapview的可能重复 【参考方案1】:
func applicationDidReceiveMemoryWarning(_ application: UIApplication) 
    URLCache.shared.removeAllCachedResponses()

清除接收器的缓存,删除所有存储的缓存 URL 响应。


您是否在注释视图上设置重用标识符? (这意味着系统可以分离这些视图,并且一次只在内存中保留少量视图。它还提高了滚动性能,因为滚动将重用分离的视图。)

使用此方法获取要重用的注解视图:

// Used by the delegate to acquire a reusable annotation view, or create a new view for registered class, in lieu of allocating a new one.
    open func dequeueReusableAnnotationView(withIdentifier identifier: String) -> MKAnnotationView?

【讨论】:

我尝试每 5 秒触发一次,没有任何改变。内存使用量仍在增长。 每 5 秒触发一次很直观,但有点奇怪。 我有一个每 5 秒运行一次的计划任务,所以我将它添加到那里进行测试,看看如果不断平移地图,它是否会阻止内存使用量增长。

以上是关于在 MKMapView 中释放缓存的主要内容,如果未能解决你的问题,请参考以下文章

使用 MKMapView 的 showShowsUserLocation 方法而不显示视图

MKMapView 和 setRegion:animated: 不更新地图视觉效果

如果我不再使用它,为啥在释放 MKMapView 后我会崩溃?

如何在Linux操作系统中手工释放内存缓存

linux中手动释放缓存的方法

百度地图释放内存最佳答案