gpt4 book ai didi

iphone - 删除注释时 MKMapView 泄漏还是只有我泄漏?

转载 作者:行者123 更新时间:2023-12-03 20:34:44 26 4
gpt4 key购买 nike

我的注释被泄露了。有问题的代码(精简到最低限度)是:

- (void)updateLocations:(NSArray *)result {
[mapView removeAnnotations:locations];
[locations removeAllObjects];
[allLocations removeAllObjects];
for (NSDictionary *location in result) {
LocationAnnotation *annote = [[LocationAnnotation alloc] initWithInfo:location];
[allLocations addObject:annote];
[annote release];
}
[self updateAnnotations];
}

- (void)filterLocations {
for (LocationAnnotation *annote in allLocations) {
if (annote.typeFlag & filterFlags) {
[locations addObject:annote];
}
}
}

- (void)updateAnnotations {
[self filterLocations];
[mapView addAnnotations:locations];
}

- (void)updateFilter {
[mapView removeAnnotations:locations];
[locations removeAllObjects];
[self updateAnnotations];
}

allLocations 是一个包含所有注释的数组(它们不一定在 map 上),locations 是一个数组,保存实际显示的位置 map 。当调用 updateLocations: 时,添加到 map 中的部分(或全部,它会随着测试的不同而变化)注释会泄漏。注解的分配历史是:

#   Category            Event Type  Timestamp   RefCt   Address     Size    Responsible Library Responsible Caller
0 LocationAnnotation Malloc 16421111296 1 0x4953870 64 MyApp -[MapViewController updateLocations:]
1 LocationAnnotation Retain 16421383424 2 0x4953870 0 MyApp -[MapViewController updateLocations:]
2 LocationAnnotation Release 16421391104 1 0x4953870 0 MyApp -[MapViewController updateLocations:]
3 LocationAnnotation Retain 16444210176 2 0x4953870 0 MyApp -[MapViewController filterLocations]
4 LocationAnnotation Retain 16557738240 3 0x4953870 0 MapKit -[MKQuadTrie insert:]
5 LocationAnnotation Retain 16557750272 4 0x4953870 0 MapKit -[MKAnnotationContainerView addAnnotation:]
6 LocationAnnotation Retain 16564529408 5 0x4953870 0 MapKit -[MKQuadTrie insert:]
7 LocationAnnotation Release 17296397312 4 0x4953870 0 MapKit -[MKAnnotationContainerView showAddedAnnotationsAnimated:]
8 LocationAnnotation Retain 21832317184 5 0x4953870 0 MapKit -[MKAnnotationContainerView removeAnnotation:]
9 LocationAnnotation Autorelease 21832324096 0x4953870 0 MapKit -[MKAnnotationContainerView removeAnnotation:]
10 LocationAnnotation Release 21832350208 4 0x4953870 0 MapKit -[MKQuadTrie remove:]
11 LocationAnnotation Release 21920062208 3 0x4953870 0 MyApp -[MapViewController updateLocations:]
12 LocationAnnotation Release 21923836416 2 0x4953870 0 MyApp -[MapViewController updateLocations:]
13 LocationAnnotation Release 22050286336 1 0x4953870 0 Foundation -[NSAutoreleasePool drain]

看看这个,罪魁祸首似乎是 [MKQuadTrie insert:] 被调用了两次,而只调用了一次 [MKQuadTrie remove:] 。我是否遗漏了某些东西,这是我的错,还是 MKMapKit 中的错误?

编辑:我看到分配历史记录有 14 个 [MKQuadTrie insert:] 调用,只有 1 个 [MKQuadTrie remove:]

最佳答案

好的,我解决了这个问题

我试图删除所有注释并添加新注释(但我的代码确保它不会删除用户位置)。这与该代码有关

我用这个替换了它

[self.map removeAnnotations: [self.map.annotations filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"!(self isKindOfClass: %@)", [MKUserLocation class]]]];

现在我没有遇到同样的问题。

关于iphone - 删除注释时 MKMapView 泄漏还是只有我泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4797438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com