【问题标题】:Does Instruments' memory leak tool have issues with 'for' loops?Instruments 的内存泄漏工具是否存在“for”循环问题?
【发布时间】:2011-01-16 06:35:31
【问题描述】:

在 Instruments 下的模拟器中运行我的应用程序以检查内存泄漏,这似乎表明此代码块中存在泄漏:

for (NSDictionary *messageDict in messageDataArray)
{
    message = [[Message alloc] init];
    ... set some properties on the 'message' object

    [messages addObject:message];
    [message release];
}

显然,在这个循环中,我正在分配/初始化一个对象,但在完成后释放它。想知道这是否只是 Instruments 如何看待该循环中的活动的症状,或者我是否正在失去理智(或做其他完全错误的事情)。

【问题讨论】:

    标签: iphone objective-c cocoa xcode instruments


    【解决方案1】:

    Leaks 仅显示泄漏内存的分配位置...

    想想泄漏意味着什么。这意味着在某个地方,你应该有一行代码发布了一些东西,但你没有那行代码。泄漏无法显示不存在的代码!

    也就是说,其中的一个消息对象被保留在其他地方并且永远不会放手 - 或者整个消息数组在某处泄漏,但随后该数组分配也会显示在泄漏中。

    【讨论】:

      【解决方案2】:

      您将创建的每条消息都存储到 messages... 您确定 那个 最终不会泄漏(以及其中的内容)吗?或者可能是您的初始化程序或属性访问器中的内存泄漏?

      【讨论】:

      • "messages" 被发送回该类的委托并由该类发布。它似乎由该类很好地管理(它的访问器释放旧的并保留新的,并在 dealloc 中释放它)。如果消息本身或消息所属类被泄露,我会看到 MSNutableArray 显示为泄露,不是吗?
      • 魔鬼在细节中。在该委托类(一个 UITableViewController 子类)中,它创建了一些自定义 UITableViewCell 子类对象,这些对象没有释放它们被赋予的“消息”对象。不过,感谢您的反馈,这就是让我挖掘的原因!
      猜你喜欢
      • 2014-09-16
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多