Ios 在屏幕外时是否取消NSFetchedResultsController委托?

Ios 在屏幕外时是否取消NSFetchedResultsController委托?,ios,nsfetchedresultscontroller,Ios,Nsfetchedresultscontroller,在屏幕外关闭NSFetchedResultsController委托是否是最佳做法 例如,我有一个由NSFRC管理的列表。当我点击列表项时,我会得到一个详细视图。我可能会更改细节视图中的某些内容,从而将其从列表中删除。或者,如果我继续浏览详细视图,我可以使它加载更多数据(这将随后更新父表视图NSFRC) 当我把它拿出来的时候,我会有奇怪的行为。似乎在任何地方都找不到这方面的建议。没有理由在这里取消您的NSFRC。事实上,让NSFRC管理您的tableView的主要便利在于,当您在其他视图中更改数

在屏幕外关闭NSFetchedResultsController委托是否是最佳做法

例如,我有一个由NSFRC管理的列表。当我点击列表项时,我会得到一个详细视图。我可能会更改细节视图中的某些内容,从而将其从列表中删除。或者,如果我继续浏览详细视图,我可以使它加载更多数据(这将随后更新父表视图NSFRC)


当我把它拿出来的时候,我会有奇怪的行为。似乎在任何地方都找不到这方面的建议。

没有理由在这里取消您的NSFRC。事实上,让NSFRC管理您的tableView的主要便利在于,当您在其他视图中更改数据时,它会适当地更新自身。这也会按顺序应用数据更改,而不必在返回列表时重新提取所有数据。

我很久以前也发布了一个类似的问题,寻求对这一“最佳实践”的技术解释。但是我什么也没找到

我想大部分建议的“最佳实践”都来自较旧的iOS版本,在出现内存警告时可以调用
viewDidUnload
,但现在已经不是这样了

根据我的经验,我发现只有在背景更新和合并的情况下才必须辞职。所有其他情况取决于应用程序逻辑

例如,当您使用后续UIView嵌套CoreData实体时,如下所示:

child1 (UITableView)-->child2 (Detail)-->child3 --> (UITableView)-->ecc...
然后,child3上的更改将使Child1表视图对该更改作出反应,因此您可能希望通过重新指定为委托或内省更改并在委托方法中返回YES或NO来避免对远程获取的控制器进行不必要的调用。重新提取查询可能更简单、更高效

保持相同的结构,假设您通过合并两个上下文对最新的UITableView进行了大规模更新,如果您对所有控制器使用了相同的上下文,那么即使不需要,它们也会尝试更新其视图


因此,对于UITableView-->UIView(detail)这样的简单情况,我看不出有任何保留委派的问题,其他情况下,我会做一些分析。

据我所知,NSFRC的主要方便之处在于无论出于何种原因在后台发生的数据更改(获取新数据),当您在另一个视图的屏幕外时,则不会。否则它就不会插入动画等内容。如果您中断NSFRC委托方法,您将看到在其他视图中处理相关数据时调用这些方法,只要这些数据在内存中。FRC对您的tableView或其动画一无所知。如果该行可见,则tableview将决定是否设置插入动画。无论哪种方式,当您返回列表时,如果您的FRC在屏幕外接收更新,则新行已经存在。我知道它在后台触发,只是不确定这是否是一种好的做法。我的意思是,通常您使用它将行插入到带有动画的表中,等等。这是一个很好的实践。即使动画不会出现,tableView代理也会在数据插入时逐个为新行分配初始化或出列单元格。这可以防止返回时需要完全重新加载tableView,这会降低性能。