【问题标题】:Core Data NSManagedObject Leak Cycle shown in Instruments – what does this mean?Instruments 中显示的核心数据 NSManagedObject 泄漏周期——这是什么意思?
【发布时间】:2015-03-11 18:03:03
【问题描述】:

我正在模拟器中针对我的应用运行 Xcode 泄漏工具(注意我没有运行分配工具)。

当我选择查看泄漏周期时,我得到的负载如下所示:

stracktrace 指向的代码是:

player.club = newClub

在我的应用中,一名球员属于一个俱乐部,我只是将其更新为一个新球员。

ClubPlayer 都是 NSManagedObject。

  • 一个球员属于一个俱乐部
  • 一个俱乐部有_许多球员

另外,当玩家移动俱乐部时,会创建一个新的TransferHistory(也是 NSManagedObject)

  • 转会历史中有一名球员
  • 转会历史有 to_club 和 from_club

  • 一个俱乐部有很多transfers_bought(逆:“TransferHistory.to_club”)

  • 一个俱乐部 has_many transfers_sold(逆: "TransferHistory.from_club")

但是在 Instruments 中没有提到TransferHistory

有人知道这张图片在说什么吗?

【问题讨论】:

  • 信息如此之少,很难判断出什么问题。你能显示周围的代码吗? club 属性的类型是什么?它是否有反比关系,如果有,它有什么类型的属性?
  • 俱乐部确实存在反向关系。我已经用关于模型的其他信息更新了我的问题。
  • 这里没有足够的信息。我知道 Core Data 本身没有任何泄漏,因此任何泄漏都会出现在您的代码中,我们需要帮助您。
  • 图片中的 Instruments 循环视图显示了一些 Core Data 私有方法。该框架可能以自己的特殊方式进行内存管理(因为如果不是,那么到处都会有保留循环 - 请注意,反向关系表示为retain 属性!)。所以我不会太在意这张照片。问题可能出在您的代码中。你有自定义设置器吗?或者,也许您使用处理 Player / Club 实例的块?

标签: ios objective-c core-data memory-leaks


【解决方案1】:

所以我将这个问题缩小到我的架构中的其他有一个关系。

具体来说,一个 Player 有一个 TeamSheetSelection,而一个 TeamSheetSelection 有一个 Player。

在将球员分配到新俱乐部之前。我手动将这两个都设置为 nil。

Player.team_sheet_selection.player = nil
Player.team_sheet_selection = nil

一旦我做出这个改变,Player 对象就不再在内存中徘徊。

【讨论】:

    猜你喜欢
    • 2017-05-23
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    相关资源
    最近更新 更多