Почему у меня утечка памяти? Я не могу решить это - PullRequest
0 голосов
/ 26 августа 2010

У меня утечка памяти в приборах ... Я уже кое-что разобрал, но этот оставил меня в тупике!Я был бы очень признателен, если бы вы могли помочь ... Это метод с утечкой ... Он берет в словаре данных, создает новый на основе этого и возвращает его.Я прокомментировал строки с утечками, и процентами, которые это дает утечку (не уверен, о чем это все), я попытался немного исправить ситуацию, выбрав alloc / init / release вместо autorelease, нопохоже, не имеет никакого значения ...

- (PetalLayerView *)makePetalLayerWithData:(NSDictionary *)sectionData isZeroIndexed(BOOL)zeroIndexed
{
    NSMutableSet *petalsData = [[NSMutableSet alloc] init];       // 7.2%
    NSArray *sections = [sectionData objectForKey:@"sections"];

    NSNumber *startIndex, *endIndex;
    NSDictionary *petalData;
    for(int i=0; i<sections.count; i++)
    {
        startIndex = [sections objectAtIndex:i];

        if(i < sections.count - 1)
             endIndex = [sections objectAtIndex:i+1];
        else
             endIndex = [sections objectAtIndex:0];

        if(!zeroIndexed)
        {
             startIndex = [NSNumber numberWithInt:[startIndex intValue]-1];   // 10.2%
             endIndex   = [NSNumber numberWithInt:[endIndex   intValue]-1];   // 10.5%
        }

        petalData = [[NSDictionary alloc] initWithObjectsAndKeys:startIndex, @"startIndex", endIndex, @"endIndex", nil];   // 64.4%
        [petalsData addObject:petalData];   // 7.7%
        [petalData release];
   }

   int maxLength = MAX(self.frame.size.width, self.frame.size.height);
   CGRect petalFrame = CGRectMake((self.frame.size.width - maxLength)/2, (self.frame.size.height - maxLength)/2, maxLength, maxLength);
   PetalLayerView *petalLayerView = [[[PetalLayerView alloc] initWithFrame:petalFrame] autorelease];

   NSString *tagGroupName = [sectionData objectForKey:@"section_name"];

   WheelModel *wheelModel = [WheelModel sharedInstance];

   if([sectionData objectForKey:@"filtered"])
   {
        petalLayerView.outlineColor = [wheelModel.tagColors objectForKey:tagGroupName];
   }
   petalLayerView.petalColor = [wheelModel.petalColors objectForKey:tagGroupName];
   petalLayerView.petalsData = petalsData;
   [petalsData release];

   return petalLayerView;
}

Любая помощь высоко ценится!Спасибо!

: - Джо

Ответы [ 2 ]

1 голос
/ 26 августа 2010

Вы уверены, что у вас утечка памяти? petalsData сохраняется (предположительно) с помощью petalLayerView, поэтому все данные, которые выделяются, не должны исчезать (т. е. это не утечка, а намеренное распределение). Возможно, само представление просочилось, я предположил, но это выходит за рамки предоставленного кода.

0 голосов
/ 26 августа 2010

Вам нужно освободить startIndex и endIndex сразу после petalData = [[NSDictionary alloc] ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...