我是新來的Objective-C,所以請原諒我的無知:刪除MKAnnotations
我已經宣佈了一種方法,一類WGMap : MKMapView
像這樣:
- (void)cleanupMap { NSLog(@"Cleaning up the map!"); NSSet* visible = [self annotationsInMapRect:[self visibleMapRect]]; NSArray* all = [self annotations]; NSMutableArray* discard = [NSMutableArray array]; for (id<MKAnnotation> cur in all) { if (![visible containsObject:cur]) [discard addObject:cur]; } [self removeAnnotations:discard]; }
目的是清理當前不在屏幕上的MKAnnotations以節省內存。我使用GCD調度計時器定期調用此方法。
我有另一種並行運行的方法,偶爾會將MKAnnotations添加到MKMapView。我注意到我偶爾會得到以下錯誤: **** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x17025ed20> was mutated while being enumerated.'
有時,我會得到一個類似的數組超出範圍的錯誤。
我該如何着手預防呢?我試過讓我的班級(從MKMapView派生)NSArray* annotations
屬性atomic
而不是默認的nonatomic
,但它沒有解決問題。
如果viewForAnnotation方法已實現並正確使用視圖出隊/重用機制,則不需要自己執行此操作。你怎麼知道你有「高內存使用率」問題? – Anna 2014-08-28 10:49:58