Objective c 其中';内存泄漏在哪里?

Objective c 其中';内存泄漏在哪里?,objective-c,iphone-sdk-3.0,memory-leaks,instruments,Objective C,Iphone Sdk 3.0,Memory Leaks,Instruments,Instruments告诉我这个代码中有一个mem漏洞,但我似乎找不到它……有什么帮助吗?对不起,还是新手的问题 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { int altoBufferCelda = 26; Mensaje *msg = (Mensaje *)[model.mensajes objectAtIndex:indexP

Instruments告诉我这个代码中有一个mem漏洞,但我似乎找不到它……有什么帮助吗?对不起,还是新手的问题

- (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;     
}
我想说: [NSNumber numberWithFloat]

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

因为这是目前被接受的,我会改变我的答案


乐器不是神谕。这可能是错误的。使用它作为您应该查看的内容的有力指南,但是如果您确实无法发现代码中有任何错误或泄漏,请继续。

我看不到您的代码中有任何内存泄漏。正如托斯指出的,仪器并不总是准确的。这主要是因为即使是来自苹果框架的代码也包含内存泄漏,这也是仪器报告的


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

这将做什么?发生了什么事?什么“工具”?如果你提供更多的信息,它将帮助人们帮助你。Marcgg,很抱歉,信息不足。这是为iphone编写的objective-c代码。该方法是用于控制iphone开发人员熟知的GUI控件的委托的一部分。仪器是一种开发工具,用于检测mem泄漏和许多其他问题things@marcgg我想说,Cocoa开发人员都知道“Instruments”是开发人员工具中包含的评测应用程序。至于目的,“heightForRowAtIndexPath:”还不够清楚吗?@nico:你能更具体地说明一下你是如何将泄漏缩小到这一特定代码块的吗?此外,仪器通常指示泄漏物体的类型。这些信息将非常有用。我应该忽略这个漏洞吗?或者尝试不同的东西?谢谢那是不对的。[NSNumber numberWithFloat:]返回自动释放的对象。你是对的,iPhone上没有GC,但肯定有自动释放池。我没有看到实际代码中有漏洞。UIKit框架本身可能存在漏洞;如果自动释放的对象没有被保留,那么它将在当前事件结束时被释放,这在iPhone和OS X上都是如此。垃圾收集会在对象超出范围时释放对象,并且没有其他对象可以访问它们(它们是不可访问的)。numberWithFloat将返回一个自动释放的NSNumber对象,因此不必释放,因为它不保留在上面的方法中。但是,自动释放池不是只有在应用程序退出时才会被耗尽吗?它没有那么糟糕。我认为它比手动删除和释放内存要好得多。这变得非常复杂。另外,关于自动释放池的另一个注意事项是:它们和其他对象一样,都是对象,因此您可以根据需要创建和销毁它们。我强烈建议在处理内存受限的环境时(如iPhone)。它们可以显著降低您的总体内存占用。