【问题标题】:Trying to find leak of type NSMutableArray. Instruments shows leak in method.试图找到 NSMutableArray 类型的泄漏。仪器显示方法泄漏。
【发布时间】:2012-02-18 23:57:31
【问题描述】:

我消除了当前应用程序中的所有泄漏。但是 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];
}

【问题讨论】:

  • 代码中没有明显的泄漏。它可能在 Meter 类中?
  • 您可能想要深入挖掘并查看initWithType 实例方法。也许有泄漏

标签: iphone objective-c memory-management memory-leaks 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];
}

在为属性分配新值之前将其归零是没有意义的。

另外,没有必要为已有的数组创建新数组。如果你已经正确声明了volumesoundsrepeats 属性,使用copy 而不是retain

尝试一下,看看它是否效果更好。

【讨论】:

  • 谢谢,这实际上解决了它。同样,您的代码更短,更直接,我想我在设计该方法时想多了......
猜你喜欢
  • 2011-11-02
  • 2011-05-31
  • 2011-10-06
  • 2012-05-15
  • 2011-12-06
  • 2012-07-06
  • 2011-07-11
  • 2011-03-05
相关资源
最近更新 更多