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