我编写并使用THIS CLASS使用自定义注释创建MKMapView
的小型快照图片,并将其设置在UIImageView
的{{1}}内。我以这样的方式写它,调用和忘记,而不必过多担心内存消耗。
工作原理:
我有一个字典,其中包含一个地方的相关值(名称,纬度,经度等)[来源是FourSquare API]。
然后我请求UITableViewCell
(参见Gist)为该位置创建一个图像,并将其设置在子类CellMapFactory
的图像视图中,如下所示:
UITableViewCell
然后,CellMapFactory使用CellMapFactory* cellMapFactory = [[CellMapFactory alloc] init];
[cellMapFactory createCellMapForPlace:[self.cellData objectForKey:@"checkin"] inImageView:mapImageView];//mapImageView is a `UIImageView`.
,MKMapSnapshotOptions
和自定义注释创建此图像,并在成功完成后将其设置在引用的图像视图中。
此外,成功完成后,我使用MKMapSnapshotter
手动将图像缓存到磁盘,以便下次请求相同位置的屏幕截图时,从SDWebImageManager
磁盘缓存中获取而不是重做整个过程。
问题
地图创建过程以及将完成的图像设置为图像视图绝对没问题。但是,当表中的多个单元格需要绘制这些不同的快照时,每个单元格都会创建一个新的SDWebImage
实例,该实例又会为应用程序窗口添加新的CellMapFactory
。这疯狂地增加了内存使用量。
所需解决方案
我希望MKMapView
能够连续创建这些快照。例如,如果我的表中的20个单元格需要20个唯一快照,CellMapFactory
必须以串行方式处理它们(队列?),并使用相同的CellMapFactory
一次创建一个快照。我看到它的方式(也许我错了),这将有助于大大限制内存消耗。
以下是一个示例屏幕截图,仅供记录:
将非常感谢任何帮助(以及所需解决方案的变体)。感谢。
答案 0 :(得分:1)
如何创建单元可用于请求快照的快照界面。对于快照不可用时,它提供了一种机制,您可以安排快照创建并注册它可以回调以接收创建的映像的委托或完成块。
如果您在每个单元格中执行此操作,则可以提供占位符图像,该图像将在可用时更新为正确的图像。
在实现中,只需排队请求,这些请求应允许您一次执行一个请求。完成后,缓存并触发完成委托/块。不知道你可以在后台运行多少这项任务?可能你可以运行一些线程来控制使用多少MKMapView,从而平衡内存和性能。