Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在使用核心数据时提高UI性能_Objective C_Ios_Cocoa Touch_Design Patterns_Core Data - Fatal编程技术网

Objective c 在使用核心数据时提高UI性能

Objective c 在使用核心数据时提高UI性能,objective-c,ios,cocoa-touch,design-patterns,core-data,Objective C,Ios,Cocoa Touch,Design Patterns,Core Data,我一直在项目中使用核心数据,并且一直依赖其数据故障系统来返回缓存数据,但是我遇到了一些性能问题,特别是在UITableView中显示数据时,该视图根据获取的数据配置视图 它基本上通过一些NSManagedObject实例的唯一ID获取它们,并对存储在NSNumber中的值求和。它在for循环中对大约40个不同的对象执行此操作,并且每次重新加载UITableView时都执行此操作 是否有任何建议的方法来监听核心数据NSManagedObject中的更改,或者在我的级别上缓存数据,或者我是否应该依靠

我一直在项目中使用核心数据,并且一直依赖其数据故障系统来返回缓存数据,但是我遇到了一些性能问题,特别是在UITableView中显示数据时,该视图根据获取的数据配置视图

它基本上通过一些NSManagedObject实例的唯一ID获取它们,并对存储在NSNumber中的值求和。它在for循环中对大约40个不同的对象执行此操作,并且每次重新加载UITableView时都执行此操作

是否有任何建议的方法来监听核心数据NSManagedObject中的更改,或者在我的级别上缓存数据,或者我是否应该依靠数据错误,而仅仅是我做错了什么


如果您能为我指出一个处理这种情况的好模式,我将非常感谢。

您可以直接使用核心数据检索属性的总和。阅读标题为的部分

这应该是您需要的唯一提示:

NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"Count"];
NSExpression *sumOfCountExpression = [NSExpression expressionForFunction:@"sum:"
                                          arguments:[NSArray arrayWithObject:keyPathExpression]];

除非重新加载表的次数过多,否则此操作的速度不应太慢而导致问题。

NSFetchedResultsController提供了一种很好的机制来处理错误,并提供了一个干净的UITableView界面。使用Instruments and Time Profiler可以很好地了解性能问题的具体位置。

您需要做的第一件事是使用NSFetchedResultsController。它与UITableview配合使用,对于您在这里试图实现的目标非常有效。第二件事,为获取请求分配fetchBatchSize。您不需要将所有记录都保存在内存中

是否有对象唯一id的索引?获取40个索引对象不需要很长时间。你能把代码贴在你处理核心数据的地方吗?当然,我稍后会添加一些代码。