0

在它的核心,我的应用程序会向用户询问一堆数字,通过核心数据存储它们,然后我的应用程序负责向用户显示所有这些数字的平均值。

所以我认为我应该做的是,在用户输入一个新数字后,我可以启动一个新线程,获取NSFetchDescription实例中的所有对象并在我NSManagedObjectContext的 .主线程。

我知道 Core Data 中的并发规则是每个NSManagedObjectContext实例一个线程,所以我想知道的是,您是否认为我刚才描述的内容不会让我的应用程序在 5 个月后爆炸?我只是认为没有必要为了做一些微不足道的计算而实例化一个全新的上下文......

4

2 回答 2

0

根据您所描述的,为什么不将输入到CoreData模型中的数字存储到NSMutableArray? 似乎您正在存储这些以备将来检索,以防有人需要查看(并且可能修改)先前的计算。在这种情况下,输入当前的一组数字后,无需进行提取。只需使用一个可变数组并用当前计算的所有数字填充它。输入数字后,将其保存到模型和数组中。当用户准备好查看平均值时,对已填充数组中的数字进行数学运算。如果用户想要修改之前的计算,将这些数字检索到一个数组中并从那里开始工作。

Context底线是,除非您从大型数据集中填充模型(例如电话簿的初始播种等),否则您不需要使用多个线程和 merging 。Context对于您所描述的如此小的更改,修改 a并在该上下文上调用 save 是一件非常快的事情。

于 2012-12-23T13:21:34.040 回答
0

我想说你可能想做一些测试,特别是关于数据集的大小。如果它非常小,则 sqlite 调用非常快,因此您可以在主队列中进行操作。但如果需要一些时间,那么明智的做法是将其从主线程中移除。

Apple 在 2011 年引入了父子托管对象上下文的概念,以使在不同线程上使用 MO 上下文更容易。您可能想查看有关 Core Data 的 WWDC 视频。

您可以使用 NSExpression 来获取真正的高性能函数,例如最小值、最大值、平均值等。这是一个很好的链接。有关于SO的例子

http://useyourloaf.com/blog/2012/01/19/core-data-queries-using-expressions.html

祝你好运!

于 2012-12-23T16:55:39.847 回答