更新
看起来这个问题已经在 iOS 4.3 中悄悄修复了。到目前为止,被认为“足够远”以使注释被回收的距离似乎是数百英里,即使在非常接近的情况下也是如此。当我使用 iOS 4.3 SDK 构建我的应用程序时,注释会根据更合理的限制进行回收。
有没有其他人遇到过这个问题?这是代码:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(WWMapAnnotation *)annotation {
// Only return an Annotation view for the placemarks. Ignore for the current location--the iPhone SDK will place a blue ball there.
NSLog(@"Request for annotation view");
if ([annotation isKindOfClass:[WWMapAnnotation class]]){
MKPinAnnotationView *browse_map_annot_view = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"BrowseMapAnnot"];
if (!browse_map_annot_view) {
browse_map_annot_view = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"BrowseMapAnnot"] autorelease];
NSLog(@"Creating new annotation view");
} else {
NSLog(@"Recycling annotation view");
browse_map_annot_view.annotation = annotation;
}
...
显示视图后,我得到
2009-08-05 13:12:03.332 xxx[24308:20b] Request for annotation view
2009-08-05 13:12:03.333 xxx[24308:20b] Creating new annotation view
2009-08-05 13:12:03.333 xxx[24308:20b] Request for annotation view
2009-08-05 13:12:03.333 xxx[24308:20b] Creating new annotation view
对于我添加的每个注释(~60),等等。地图(正确)仅显示当前矩形中的两个注释。我在 viewDidLoad 中设置区域:
if (center_point.latitude == 0) {
center_point.latitude = 35.785098;
center_point.longitude = -78.669899;
}
if (map_span.latitudeDelta == 0) {
map_span.latitudeDelta = .001;
map_span.longitudeDelta = .001;
}
map_region.center = center_point;
map_region.span = map_span;
NSLog(@"Setting initial map center and region");
[browse_map_view setRegion:map_region animated:NO];
在请求任何注释视图之前,正在设置的区域的日志条目会打印到控制台。
这里的问题是,由于一次请求所有注释,[mapView dequeueReusableAnnotationViewWithIdentifier] 什么都不做,因为地图上的每个注释都有唯一的 MKAnnotationViews。这导致了我的记忆问题。
一个可能的问题是这些注释聚集在一个非常小的空间(约 1 英里半径)中。尽管地图在 viewDidLoad(纬度和经度增量 0.001)中被放大得非常紧密,但它仍然会一次加载所有注释视图。
谢谢...