1
由於性能的原因,我需要在我的註釋列表上做一個二進制插入,但是當我到達需要插入註釋的部分後,我意識到我的mapView與一個NSMutableArray,所以我不能在列表中間自由添加註釋。MKMapView如何創建insertAnnotationAtIndex
while (first <= last) {
NSUInteger mid = (first + last)/2;
if ([name compare:[mapView.annotations objectAtIndex:mid]] == NSOrderedDescending) {
first = mid + 1;
} else if ([name compare:[mapView.annotations objectAtIndex:mid]] == NSOrderedAscending) {
last = mid - 1;
} else {
Annotation *destination = [[Annotation alloc] init];
[destination setTitle:name];
[destination setSubtitle:sub];
[destination setCoordinate:coords];
// method doesn't exist, but how do I create/simulate this?
[mapView insertAnnotation:destination atIndex:mid];
[destination release];
return;
}
}
是否可以擴展mapview並創建我自己的類來做到這一點?如果是這樣,我將如何去在索引處添加註釋?
當然,順序很重要,因爲排序的註釋列表允許我執行二分搜索而不是線性搜索。在包含大約600個註釋的地圖上,它將平均查找次數從300次比較降低到大約9次。此外,MKMapView使用NSArray來保存註釋,如http://developer.apple.com/library/ios/#documentation /MapKit/Reference/MKMapView_Class/MKMapView/MKMapView.html,但我不知道如何子類化它。 – Drahcir 2011-03-23 12:50:45
'annotations'屬性提供了一個數組,但這不一定是MKMapView如何存儲數據。請記住:屬性只是提供某些訪問者的承諾。數組是一維對象,但MKMapView需要對二維的註釋進行排序,並且比數組有更好的結構。此外,不能保證MKMapView將保留您給它的數組中的註釋順序。你應該保留你自己的排序列表的註釋,而不是依靠MKMapView來保存你的訂單。 – Caleb 2011-03-23 13:27:36
經過深思熟慮之後,我相信你對自己排序列表的建議是一個更好的主意。我不必通過實際的mapview跟蹤註釋,我可以通過製作一個副本並稍後添加到實際的mapview來模擬它。雖然你的回答實際上是一個問題,並沒有提供答案,但你的評論很有用,所以我會接受它。也許你可以編輯它來包含答案? – Drahcir 2011-03-23 14:12:45