我有一个数据结构,其中包含:
- 显示
NSNumber
POI(兴趣点)的重要性 - a
CLLocation
包含 POI 的坐标。
假设我能够按重要性对 POI 进行排序,并且每个 POI 都有一个独特的重要性因子,那么获取包含在我的显示区域内的 POI 的子数组的最佳方法是什么MKMapView
?
简单地检查每个 POI 似乎效率低下,因为我可能有几千个 POI,并且我想在每次缩放级别更改时重复此过程(因此在任何显示的区域我只显示 # 最重要的那些)。
我有一个数据结构,其中包含:
NSNumber
POI(兴趣点)的重要性CLLocation
包含 POI 的坐标。假设我能够按重要性对 POI 进行排序,并且每个 POI 都有一个独特的重要性因子,那么获取包含在我的显示区域内的 POI 的子数组的最佳方法是什么MKMapView
?
简单地检查每个 POI 似乎效率低下,因为我可能有几千个 POI,并且我想在每次缩放级别更改时重复此过程(因此在任何显示的区域我只显示 # 最重要的那些)。
我猜你正在寻找的是:
- (NSSet *)annotationsInMapRect:(MKMapRect)mapRect
引用苹果文档:
此方法提供了一种快速检索地图特定部分中的注释对象的方法。这种方法比你自己对 annotations 属性中的对象进行线性搜索要快得多。
请注意,它仅适用于 iOS 4.2 及更高版本,恐怕除了以前的 iOS 版本中的自定义代码之外没有其他解决方案。
编辑关于您的评论:我的猜测是,对于几千个注释,上述方法应该可以解决问题,MKAnnotation
是一个轻量级协议,通过坐标过滤来扫描数组应该没问题。但要注意不要添加数千个MKAnnotationView
,它适用于 iPhone 4,已经做到了,但你几乎不能滚动地图 :)
那我建议:
关于内存,嘿,这些设备至少有 64MB 的可用内存供您的应用使用,如果没有,它们会杀死一些进程,不要被几 K 的注释吓到!只需注意内存泄漏,尤其是在如此密集的过程中。