【问题标题】:Why does this code produce leaks?为什么这段代码会产生泄漏?
【发布时间】:2026-01-07 12:20:03
【问题描述】:

第一次在这个论坛上发帖的总菜鸟。

我正在编写我的第一个 iPhone 应用程序。有问题的代码是在 cellForRowAtIndexPath 方法中填充我的 UITableViewCell。

当我在打开 Leaks Instrument 的情况下运行我的应用程序时,泄漏部分指向我的这部分代码。我已经阅读了关于本网站上各种书籍和帖子的内存管理,据我所知,下面的代码似乎符合所需的分配/释放编码指南。但是,泄漏工具仍指向此特定部分。我只是不明白为什么。

您的帮助将不胜感激。

ModelClass * myModelData = [myTempDataArray objectAtIndex:[indexPath row]];

NSString * myURL = [[NSString alloc] initWithFormat:@"%@/images/%@", SERVER_URL, [myModelData publisherLogoFileName]];
NSURL * imageURL = [[NSURL alloc] initWithString:myURL];
[myURL release];
[[cell productImageM] setUrl:imageURL];
[imageURL release];
[[self objMan] manage:[cell productImageM]];

return cell;

【问题讨论】:

  • Stack Overflow 不完全是一个论坛 :)
  • @zneak,论坛更容易说论坛-Digg-wiki-blog 站点

标签: iphone xcode memory-leaks


【解决方案1】:

Leaks 工具不会告诉您应该在哪里释放对象,它会告诉您分配对象的位置。

那段代码看起来不错;您拥有 myURL 的时间足够长,可以使用它来创建 imageURL 然后释放它。您将 imageURL 提供给单元格的 productImageM,然后将其释放。然后,您对不属于您的对象进行一些操作。

据推测,[cell productImageM] 返回的对象类型保留了它的 Url 属性,随后泄露了它。

【讨论】:

  • 感谢您的快速回复。 objMan obj 是我自己没有编写的类的一个实例。它与管理图像缓存有关。我会去查看他们的代码,以找出它是否会在某处泄漏 URL。但由于这不是我编写的代码,这可能很难。
【解决方案2】:

您可以尝试使用“构建”菜单中的“构建和分析”选项。一般来说,它应该指出泄漏的确切线。

【讨论】: