何时以及多久调用一次 processPendingChanges 以确保图形完整性
Posted
技术标签:
【中文标题】何时以及多久调用一次 processPendingChanges 以确保图形完整性【英文标题】:When and how often to call processPendingChanges to ensure graph integrity 【发布时间】:2011-04-18 21:49:41 【问题描述】:我有一些由 Core Data 管理的实体,并且有几种情况,在一个方法中,我设置了一些属性值,这些属性值将导致 Core Data 将强制执行的图形更改并执行(逻辑上)依赖于最新状态的其他操作为图表。
是否有任何理由在每次设置关系后不调用processPendingChanges
,以确保图表始终是最新的?当我这样做时,一切正常,但是,很明显,它有点“嘈杂”,并且打破了一些本来是通知的处理(例如,最终发送大量controllerWillChangeContent
/controllerDidChangeContent
的获取结果控制器否则会发生这种情况时向他们的代表发给他们)。
补充:
从对实体进行更改的任何方法返回后,图表是否总是最新的?
【问题讨论】:
【参考方案1】:我发现在检查 NSManagedObjectContext 的已删除对象之前调用 processPendingChanges 很困难。至少如果某些关系将 deleteRule 设置为 NSCascadeDeleteRule。
如果您不调用 processPendingChanges,则 deletedObjects 可能不包含将在当前事件结束时被级联删除的对象。
【讨论】:
【参考方案2】:processPendingChanges
最常用于 ios 上,多个上下文在单独的线程上运行。它在 MacOS 下扮演着更大更常见的角色。
在大多数情况下,您通常不必在 iOS 下调用它。这样做并没有真正给您带来太多优势,如果您有一个复杂的图形,它可能会在主线程上执行时导致 UI 滞后。
除非测试表明您由于某种原因失去了图形完整性,否则我不会为此烦恼。
【讨论】:
问题是我需要先检查图中的关系,然后才能强制执行模型。 当您设置关系时,由于 Key-Value-Observing,关系的双方都可以立即使用它。我见过很少的情况(在单个线程上)你必须做任何事情来更新对象图。除非您确定您在图形完整性方面遇到问题,否则我不会打扰。始终选择最简单的设计,然后仅在测试证明您需要时才增加复杂性。 过早的优化是所有编程罪恶的根源。 我之所以问,是因为我确实(不是假设地)需要先查看图表,然后才能处理一些刚刚进行的更改。所以问题仍然存在:将待处理更改的处理分解为对 processPendingChanges 的多次调用与通常让它们作为一组处理(这需要重新设计)是否有缺点? processPendingChanges 可以触发一连串的副作用,所以如果您的图表很复杂并且有很多副作用,例如计算属性,然后每次调用都会冒着随机停止应用程序的风险。因此,我不建议每次都这样做。以上是关于何时以及多久调用一次 processPendingChanges 以确保图形完整性的主要内容,如果未能解决你的问题,请参考以下文章
公共互联网何时(以及多久)会阻止 WebSocket 连接?
如果我经常调用 setneedsdisplay,drawrect 多久会被调用一次?这是为啥?