iOS: Xcode 4.2: Leaks Instrument сообщает, что у меня есть утечка с моими NSMutableArray и NSMutableDictionary, но я не вижу, где - PullRequest
1 голос
/ 18 января 2012

У меня есть следующий простой код для отслеживания MKAnnotations в моем MKMapView. Я создаю аннотации в цикле по списку мест, которые я хочу отслеживать. Я добавляю аннотации к классам моей коллекции, NSMutableDictionary и NSMutableArray, которые объявлены как свойства (не использующие ARC, но использую Xcode 4.2, поэтому использую «strong» вместо retain, поскольку они предположительно являются синонимами; для будущей совместимости с ARC).

Если я вызову эту процедуру во второй раз (скажем, когда список местоположений будет обновлен), инструмент «Утечки» утверждает, что аннотации просачиваются, а также сами объекты коллекции. (Я получаю один 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 голосов
/ 18 января 2012

Приборы показывают, где расположены утечки, но не показывают, где происходит утечка.Я имею в виду, может быть, объект, который расположен в указанной строке, вызывает утечку где-то еще в вашем коде.

Я не знаю, так ли это в вашем коде.

...