首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MKMapSnapshotter内存崩溃-- UITableView中的多个调用

MKMapSnapshotter内存崩溃-- UITableView中的多个调用
EN

Stack Overflow用户
提问于 2016-07-07 16:36:07
回答 1查看 477关注 0票数 0

我们有一个iOS应用程序,它有一个UITableView,其中包含当单元格出现时生成的地图快照。我们使用的示例列表只是简单地显示基于Model类中提供的lat/long的映射快照。我开始注意到内存崩溃,所以我将代码减少到最低限度。崩溃仍然会发生,当我们只做快照时,甚至没有对结果做任何操作。有关代码,请参见下面的代码,代码包含在我们的自定义单元格中,并通过cellForItemAtIndexPath方法调用:

代码语言:javascript
复制
private func testMapSnapshot(viewModel: StreamViewModel)
{
    let latDelta:CLLocationDegrees = 0.005
    let lonDelta:CLLocationDegrees = 0.005

    let span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta)
    let location:CLLocationCoordinate2D = CLLocationCoordinate2DMake(viewModel.coordinate.latitude, viewModel.coordinate.longitude)
    let region:MKCoordinateRegion = MKCoordinateRegionMake(location, span)

    let options = MKMapSnapshotOptions()
    options.region = region
    options.size = mapImageView.frame.size
    options.scale = UIScreen.mainScreen().scale

    viewModel.mapSnapshotter = MKMapSnapshotter(options: options)
    viewModel.mapSnapshotter!.startWithCompletionHandler() { snapshot, error in
        // do nothing
    }
}

didEndDisplayingCell中,我确保取消mapSnapshotter。参见参考(我们将模型列表保存在包含表视图的主要VC类中):

代码语言:javascript
复制
func collectionView(collectionView: UICollectionView, didEndDisplayingCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) 
    let model = viewModel?[indexPath.item] {
        model.mapSnapshotter?.cancel()
        model.mapSnapshotter = nil
    }
}

注意,在执行最后一步之前,它已经崩溃了。但是现在,如果你开始快速地滚动列表,它就会开始口吃,并且不会停止口吃。如果您上上下下地列出了大约150行,则需要不到30秒的时间,我们就可以开始看到内存警告,然后再发生崩溃。

我查了一遍仪器,但没什么用。看起来,Heap和匿名VM分配正在逐渐增加,可能会导致崩溃。参考见:

我看到了这篇文章:MKMapSnapshotter uses incredible amounts of CPU & RAM,但它没有得到解答,也没有真正解决为什么内存不被释放的问题。

对这件事该怎么办有什么想法吗?谢谢您的提前,请让我知道,如果我可以提供更多的信息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-13 20:08:35

虽然我无法找到解决这个特定问题的方法,但我只能在scrollView停止时调用映射快照来解决这个问题--然后它会抓取所有可见的单元格,并只加载这些单元格。这样,它减少了对该API的调用次数,并防止了内存问题,而不是通过cellForRow方法向下滚动列表时不断调用它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38250875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档