Objective c iOS:Xcode 4.2:Leaks工具说我的NSMutableArray和NSMutableDictionary有漏洞,但我不知道在哪里

Objective c iOS:Xcode 4.2:Leaks工具说我的NSMutableArray和NSMutableDictionary有漏洞,但我不知道在哪里,objective-c,ios,instruments,memory-leaks,Objective C,Ios,Instruments,Memory Leaks,我有以下简单的代码来跟踪MKMapView中的mkannotation。我通过要跟踪的位置列表在循环中创建注释。我将注释添加到我的集合类、NSMutableDictionary和NSMutableArray中,它们是声明的属性,不使用ARC,而是使用Xcode 4.2,因此使用strong而不是retain,因为它们被认为是同义词;用于将来与ARC的兼容性 如果我第二次调用这个例程,比如说当位置列表得到更新时,泄漏工具会声明注释以及集合对象本身都在泄漏。我在泄漏列表中得到一个NSMUtableD

我有以下简单的代码来跟踪MKMapView中的mkannotation。我通过要跟踪的位置列表在循环中创建注释。我将注释添加到我的集合类、NSMutableDictionary和NSMutableArray中,它们是声明的属性,不使用ARC,而是使用Xcode 4.2,因此使用strong而不是retain,因为它们被认为是同义词;用于将来与ARC的兼容性

如果我第二次调用这个例程,比如说当位置列表得到更新时,泄漏工具会声明注释以及集合对象本身都在泄漏。我在泄漏列表中得到一个NSMUtableDictionary,堆栈跟踪指向创建词典并将其设置到我的属性中的行,我们还发现了一些与注释匹配的小泄漏,以及对NSMutableArray和NSMUtableDictionary的投诉。但是,我没有发现任何违反内存管理规则的情况。我有一个通过alloc/init创建注释的版本。我通过属性设置器执行隐式保留,当集合被替换时,应该释放它们,然后释放它们的所有内容对象。如果有人能看出我哪里出了问题,我将不胜感激

@property(strong, nonatomic) NSMutableArray *annotationList;
@property(strong, nonatomic) NSMutableDictionary *annotationLocations; 


仪器显示泄漏对象的分配位置,但不显示泄漏发生的位置。我的意思是,可能是在指定行上分配的对象导致了代码中其他地方的泄漏


不过,我不知道您的代码是否会出现这种情况。

在“丢失”数组和字典之前,您是否尝试过清除它们?您的代码乍一看似乎还可以。尽管它们的语义等价,但Exchange strong和retain仍然存在漏洞吗?这不是ARC代码,您确实在dealloc中释放了两个IVAR,不是吗?我将尝试交换strong/retain。是,IVAR在dealloc中释放,但控制器对象不会死亡,因此永远不会调用。是。就我而言,没有其他地方可以处理这些物品。它们只是从这个类中的其他地方读取,而这个类是它们唯一被引用的地方。我开始认为这是虚惊一场。仅供参考,静态分析表明此代码没有问题。您在清理所有输出并重建后正在评测代码,对吗?也许我会尝试提取这段代码,将其放在另一个项目中,并评测这一小部分。
-(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];
}