Попытка найти утечку типа NSMutableArray.Прибор показывает утечку в методе. - PullRequest
0 голосов
/ 25 января 2012

Я устранил все утечки из моего текущего приложения.Однако Instruments постоянно сообщает мне, что у меня есть утечка в методе, показанном ниже.

Утечка имеет тип NSMutableArray и имеет размер 16 или 32 байта.Да, я знаю, что это немного, но это складывается.Также рассматривайте это как академический вопрос, который мне нужно решить, чтобы сделать мой код без утечек.

+ (id) meterFromDict:(NSDictionary*)dict {
    Meter* resMeter = [[Meter alloc] initWithType:[[dict objectForKey:@"MeterBase"] intValue]];
    //NSLog(@"dict: %@",dict);
    resMeter.volume = nil;
    resMeter.sounds = nil;
    resMeter.repeats = nil;

    resMeter.volume = [[[NSMutableArray alloc] initWithArray:[dict objectForKey:@"volumeArray"]] autorelease];
    resMeter.sounds = [[[NSMutableArray alloc] initWithArray:[dict objectForKey:@"soundsArray"]] autorelease];
    resMeter.repeats = [[[NSMutableArray alloc] initWithArray:[dict objectForKey:@"repeatsArray"]] autorelease];
    //NSLog(@"MeterFromDict called and resmeter.repeats count is : %i",[resMeter.repeats count]);
    resMeter.bpm = [[dict objectForKey:@"BPM"] floatValue];

    return [resMeter autorelease];
}

1 Ответ

0 голосов
/ 25 января 2012

Не глядя на вывод ваших инструментов напрямую, я не могу точно сказать, но вы пишете какой-то избыточный код: Попробуйте это:

+ (id) meterFromDict:(NSDictionary*)dict {
    Meter* resMeter = [[Meter alloc] initWithType:[[dict objectForKey:@"MeterBase"] intValue]];
    //NSLog(@"dict: %@",dict);

    resMeter.volume = [dict objectForKey:@"volumeArray"];
    resMeter.sounds = [dict objectForKey:@"soundsArray"];
    resMeter.repeats = [dict objectForKey:@"repeatsArray"];
    //NSLog(@"MeterFromDict called and resmeter.repeats count is : %i",[resMeter.repeats count]);
    resMeter.bpm = [[dict objectForKey:@"BPM"] floatValue];

    return [resMeter autorelease];
}

Нет смысла обнулять ваши свойства, прежде чем присваивать им новые значения.

Кроме того, нет смысла создавать новые массивы для уже имеющихся массивов. И если вы правильно объявили свои свойства volume, sounds и repeats с copy вместо retain.

Попробуйте и посмотрите, работает ли он лучше.

...