【发布时间】:2018-11-13 20:52:08
【问题描述】:
我有一个基于地图的应用程序,它使用 MKMapView 作为主视图。 当我的 iPad 连接到 Xcode 时,我可以在调试导航器中看到在地图周围缩放和平移时内存使用量不断增加。我想 iOS 正在缓存地图图块,但不会在 MkMapView 被销毁之前释放它们。
有没有办法强制 MkMapView 清除所有缓存?
如果我继续平移和缩放我的应用程序最终会在内存使用量为 3Gb 时崩溃。
【问题讨论】:
我有一个基于地图的应用程序,它使用 MKMapView 作为主视图。 当我的 iPad 连接到 Xcode 时,我可以在调试导航器中看到在地图周围缩放和平移时内存使用量不断增加。我想 iOS 正在缓存地图图块,但不会在 MkMapView 被销毁之前释放它们。
有没有办法强制 MkMapView 清除所有缓存?
如果我继续平移和缩放我的应用程序最终会在内存使用量为 3Gb 时崩溃。
【问题讨论】:
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?
【讨论】: