2012-12-23 190 views
0

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

所以我想我应该做的是,用户输入一个新号码后,我可以启动一个新的线程,在一个NSFetchDescription实例取到的所有对象,并把它在我的NSManagedObjectContext,做适当的计算,然后更新主线程上的UI。

我知道核心数据中的并发规则是每个NSManagedObjectContext实例的一个线程,所以我想知道的是,你是否认为我刚刚描述的没有我的应用程序爆炸5个月后?我只是不认为有必要实例化一个新的上下文只是为了做一些可怕的计算...

+0

我喜欢核心数据,但如果你所保存的只是“一堆数字”,这可能是一个错误的工具......尤其是如果你没有对它们做任何事情,除了取所有(和存储)。 –

回答

0

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

底线是,你不应该需要使用多个线程和合并Context s,除非你是从一个大型数据集(如电话簿的初始播种等)填充模型。修改Context并在该上下文中调用保存对于您所描述的如此小的更改而言是非常快速的事情。

0

我想说你可能想要做一些测试,特别是关于数据集的大小。如果它非常小,sqlite调用非常快,所以你可能会在主队列中进行操作。但是,如果需要一段时间,那么将它从主线脱离是明智的。

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

你可以使用NSExpression获取真正的高性能函数,如最小值,最大值,平均值等,这里是一个很好的链接。有对SO

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

运气好例子!