我有以下简单的代码来跟踪MKMapView中的MKAnnotations。我通过我想要跟踪的位置列表循环创建注释。我将注释添加到我的集合类,NSMutableDictionary和NSMutableArray,它们是声明的属性(不使用ARC但使用Xcode 4.2,因此使用“strong”而不是retain,因为它们应该是同义词;以便将来与ARC兼容)。 p>
如果我第二次调用此例程(例如,当位置列表更新时),Leaks Instrument声称注释正在泄漏,以及集合对象本身。 (我在我的泄漏列表中得到一个NSMUtableDictionary,堆栈跟踪指向创建字典的行并设置到我的属性中,我们以及与注释匹配的一些小泄漏,以及关于NSMutableArray的投诉和NSMutableDictionary)。但是,我没有看到任何违反内存管理规则的行为。我有一个版本通过alloc / init与我的注释创建配对。我通过我的属性“setter”进行隐式保留,当替换集合时,应该释放它们然后释放它们的所有内容对象。如果有人能看到我出错的地方,我将不胜感激。
@property(strong, nonatomic) NSMutableArray *annotationList;
@property(strong, nonatomic) NSMutableDictionary *annotationLocations;
-(void) createMapAnnotations
{
if ([[self mapView] annotations])
[[self mapView] removeAnnotations:[[self mapView] annotations]];
[self setAnnotationList:[NSMutableArray array]];
[self setAnnotationLocations:[NSMutableDictionary dictionary]];
for (JEstablishmentLocation *loc in [[JLocationManager sharedLocationManager] localLocations])
{
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
[annotation setCoordinate:[[loc estCoordinates] coordinate]];
[[self mapView] addAnnotation:annotation];
[[self annotationList] addObject:[NSDictionary dictionaryWithObject:annotation forKey:[loc estKeyValue]]];
[[self annotationLocations] setObject:loc forKey:[annotation description]];
[annotation release];
}
[self centerOnCurrentLocation];
}
答案 0 :(得分:0)
仪器显示泄漏物体的分配位置,但不显示泄漏发生的位置。我的意思是,也许在指向的行上分配的对象会导致代码中其他地方的泄漏。
我不知道你的代码是否会出现这种情况。