Попытка найти утечку типа NSMutableArray. Прибор показывает утечку в методе.
Я устранил все утечки из моего текущего приложения. Однако инструменты постоянно говорят мне, что у меня есть утечка в методе, показанном ниже.
Утечка имеет тип 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 ответ
Не смотря на ваш вывод Instruments напрямую, я не могу точно сказать, но вы пишете некоторый избыточный код: Попробуйте это:
+ (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
,
Попробуйте и посмотрите, работает ли он лучше.