我编写并使用THIS CLASS创建MKMapView
带有自定义注释的小快照图像,并将它们设置UIImageView
在UITableViewCell
. 我以这样的方式编写它,调用和忘记,而不用过多担心内存消耗。
这个怎么运作:
我有一本包含地点相关值(名称、纬度、经度等)的字典 [来源是 FourSquare API]。
然后我请求
CellMapFactory
(参见 Gist)为该位置创建一个图像,并将其设置在来自子类的图像视图中,UITableViewCell
如下所示:CellMapFactory* cellMapFactory = [[CellMapFactory alloc] init]; [cellMapFactory createCellMapForPlace:[self.cellData objectForKey:@"checkin"] inImageView:mapImageView];//mapImageView is a `UIImageView`.
然后,CellMapFactory 使用
MKMapSnapshotOptions
、MKMapSnapshotter
和自定义注释来创建此图像,并在成功完成后将其设置在引用的图像视图中。此外,在成功完成后,我使用 手动将图像缓存到磁盘
SDWebImageManager
,以便下次请求同一位置的屏幕截图时,将从SDWebImage
磁盘缓存中获取它,而不是重做整个过程。
问题
地图创建的过程,以及将完成的图像设置到图像视图的过程是绝对没问题的。但是,当表格中超过 1 个单元格需要绘制这些不同的快照时,每个单元格都会为每个请求的快照创建一个新实例CellMapFactory
,这反过来又会MKMapView
在应用程序窗口中添加一个新实例。这疯狂地增加了内存使用量。
所需的解决方案
我想CellMapFactory
连续创建这些快照。例如,如果我表中的 20 个单元格需要 20 个唯一快照,CellMapFactory
则必须以串行方式(队列?)处理它们,并一次创建一个快照,使用相同的MKMapView
. 我看到它的方式(也许我错了),这将有助于极大地限制内存消耗。
这是一个示例屏幕截图,仅供记录:
任何帮助(以及所需解决方案的变体)将不胜感激。谢谢。