这里的内存泄漏在哪里?

时间:2009-07-03 22:23:51

标签: objective-c iphone-sdk-3.0 memory-leaks instruments

仪器告诉我这段代码中有一个内存泄漏,但我似乎无法找到它....任何帮助?抱歉或新手问题。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    int altoBufferCelda = 26;
    Mensaje *msg = (Mensaje *)[model.mensajes objectAtIndex:indexPath.row];

    CGSize txtSize = [msg.texto sizeWithFont:[UIFont systemFontOfSize:17.0f] constrainedToSize:CGSizeMake(222, 222)  lineBreakMode:UILineBreakModeTailTruncation];

    [alturasDinamicas setObject:[NSNumber numberWithFloat:(txtSize.height + altoBufferCelda)] forKey:[NSNumber numberWithInt:indexPath.row]];

    return txtSize.height + altoBufferCelda;     
}

2 个答案:

答案 0 :(得分:0)

<击> 我会说:     [NSNumber numberWithFloat]

它将为您分配一个自动释放的对象。 iPhone不是垃圾收集,只是参考收集。并且由于您在离开方法之前没有释放您正在分配的内存,因此Instruments会将其报告为泄漏。

由于目前已经接受了,我会改变我的答案。

仪器不是神圣的法令。这可能是错的。使用它作为你应该看的内容的强有力的指导,但如果你真的找不到任何错误或泄漏代码,只需继续。

答案 1 :(得分:0)

我在代码中看不到任何内存泄漏。正如吐司指出的那样,仪器并不总是准确的。这主要是因为即使Apple Frameworks的代码也包含内存泄漏,也是由Instruments报告的。

如果您使用的是XCode 3.2,您可以从Build菜单中选择Build and Analyze,它会扫描您的代码,查找编译器通常无法检测到的错误。这将显示由于忘记释放对象而导致的许多可能的内存泄漏。