0

我消除了当前应用程序中的所有泄漏。然而,乐器不断告诉我,我在下面显示的方法有泄漏。试图找到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]; 
} 
+4

代码中没有明显的泄漏。它可能在米类中? – amattn

+0

您可能想深入研究并查看'initWithType'实例方法。也许有泄漏 – basvk

回答

0

不看你的仪器直接输出我不能告诉准确,但你写一些冗余代码:试试这个:

+ (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]; 
} 

有没有点在分配新的前nilling你的属性值给他们。

另外,没有意义为您已有的数组创建新数组。并且如果您已正确声明您的volume,soundsrepeats属性与copy而不是retain

试试看看它是否更好。

+0

谢谢,这实际上解决了它。再次,你的代码更短,更直接,我想我在设计这种方法时已经过度了。 – Bersaelor