iOS:Xcode 4.2:Leaks Instrument说我的NSMutableArray和NSMutableDictionary有漏洞但是我看不到哪里

时间:2012-01-18 07:31:53

标签: objective-c ios instruments memory-leaks

我有以下简单的代码来跟踪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];
}

1 个答案:

答案 0 :(得分:0)

仪器显示泄漏物体的分配位置,但不显示泄漏发生的位置。我的意思是,也许在指向的行上分配的对象会导致代码中其他地方的泄漏。

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