【问题标题】:How to release a NSManagedObject object?如何释放 NSManagedObject 对象?
【发布时间】:2013-06-08 16:06:17
【问题描述】:

如何释放一个 NSManagedObject 对象? 当我使用 - deleteObject: 在 NSManagedObjectContext 中删除一个对象(NSManagedObject)并执行保存操作时,但我没有看到,它已被释放。 我需要关心 NSManagedObject 内存管理吗?

我在这个项目中使用 ARC 和覆盖 dealloc 方法的托管对象。代码看起来像

  • (无效)dealloc { NSLog(@"托管对象释放") }

我从上下文中删除了一个托管对象,然后保存表明我不需要这个托管对象,如果上下文不释放它是否浪费内存?

提前致谢。

【问题讨论】:

  • 但是你重写了dealloc!您只是拒绝了操作系统释放对象的机会。在您的覆盖中,请调用 [super dealloc] 并再次测试。

标签: cocoa core-data


【解决方案1】:

简答 - Core Data 将管理 NSManagedObject 对象的内存。

更长的答案 - 即使 Core Data 被告知要从上下文中删除对象,您仍然可以自己在某处保留对(现在无效的)对象的引用,例如在包含原始获取结果的数组中,或者也许作为财产。当您使用 ARC 时,这些对象最终将被释放,它们对您的对象的任何引用也将被释放,但由于这个原因,当您调用 deleteObject: 时,您可能不会立即看到 dealloc。

如果您没有性能或内存问题,我不会太担心。如果你是,那么不妨看看NSManagedObjectContextrefreshObject: mergeChanges: 方法作为起点。

【讨论】:

    【解决方案2】:

    在一个典型的场景中,你从上下文中获取一个托管对象,然后删除它,然后保存上下文,当然,只要你不向它发送保留,你就不需要释放托管对象。

    PS:如果您的问题动机是学习,那很好,但我建议您转到 ARC。

    【讨论】:

      猜你喜欢
      • 2011-01-08
      • 1970-01-01
      • 2021-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多