有人可以为我澄清“refreshObject:mergeChanges:YES”吗?

Posted

技术标签:

【中文标题】有人可以为我澄清“refreshObject:mergeChanges:YES”吗?【英文标题】:Can someone provide clarification of "refreshObject:mergeChanges:YES" for me? 【发布时间】:2016-05-11 08:51:54 【问题描述】:

假设我有一个“Person”NSManagedObject 类:

class Person: NSManagedObject 
    NSManaged var name:String?
    NSManaged var bestFriend:Person?

如何确保将 bestFriend 引用为“Person”不会产生强引用循环?我知道您可以使用 refreshObject:mergeChanges 来管理 CoreData 对象之间的强引用并创建错误,因此强引用不会持续存在。我不明白的是我什么时候使用它,或者我在哪里调用它。我第一次访问“Person”对象后是否使用它?我在离开视图时使用它吗?在保存或删除之前还是之后?如果有人可以对此提供一些澄清,我将不胜感激。非常感谢!

【问题讨论】:

你想达到什么目的?每当您坚持Person 时,您不想坚持bestFriend 吗?还是你想对对象图进行内存管理? 我想对对象图进行内存管理,确保不会出现强引用循环导致内存泄漏 【参考方案1】:

您不会遇到任何内存泄漏问题(据我所知),您可能遇到的唯一问题是存储在内存中并且需要“修剪”的臃肿对象图。

如果您想“修剪”对象图,我建议您在完成处理后从对象图中删除未使用的对象,否则它们将再次被错误地放入对象图中。

所以,只要你完成了Person 的工作,就使用refreshObject:mergeChanges(使用mergeChanges:false),而bestFriend 将变成一个错误。

【讨论】:

好的,谢谢您的解释,感谢您的帮助!这是一个很好的回应。我使用泄漏仪器检查泄漏并没有遇到任何泄漏。谢谢!

以上是关于有人可以为我澄清“refreshObject:mergeChanges:YES”吗?的主要内容,如果未能解决你的问题,请参考以下文章

AWS CMK vs Data Key 澄清问题

有人可以澄清 Mac OSX 安装中 cppcheck 中的 Homebrew 是啥吗

浏览器不记得上次查看页面的位置

Prolog 否定和逻辑否定

gcc和g++使用澄清

EJB 有啥用