gpt4 book ai didi

iphone - 为什么 NSFetchedResultsController 在设置获取批量大小时加载所有行?

转载 作者:行者123 更新时间:2023-12-03 20:32:00 24 4
gpt4 key购买 nike

NSFetchedResultsController 设置为 5 以获取批量大小。我们注意到加载速度很慢,因此我们启用 SQLDebug。由于某种原因,它一次加载 5 行,但它在初始加载时对所有 100 行执行此操作。加载后,似乎一次加载 5 行。

当查看控制台时,我看到查询运行了 20 次;共有 100 行。我预计它会在前 5 行中运行 1 次,并且当您滚动时,会加载更多行。我还尝试更改获取大小,它具有相同的行为。

获取结果 Controller 的设置如下。

- (NSFetchedResultsController*) fetchedResultsController {

if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}

[NSFetchedResultsController deleteCacheWithName:@"Root"];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Message" inManagedObjectContext:_context];

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"conversation = %@", conversation];

[fetchRequest setEntity:entity];

NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"timestamp" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];

[fetchRequest setFetchBatchSize:5];

NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:_context sectionNameKeyPath:nil
cacheName:@"Root"];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;

[sort release];
[fetchRequest release];
[theFetchedResultsController release];

return _fetchedResultsController;

}

最佳答案

我们将 NSFetchedResultsController 与 tableview 结合使用。 tableview 将向 NSFetchedResultsController 请求尽可能多的行,以填充它认为需要显示并出于性能原因保留的行。通过人为地保持批量大小较低,您将导致 NSFetchedResultsController 进行更多次往返存储。

将其设置为 100 左右,看看您的表现如何。如果批量大小为 100 时遇到性能问题,则可能需要规范化核心数据模型。查看 2010 年有关 Core Data 的 WWDC 视频。其中有一个关于优化核心数据以及与 NSFetchedResultsController 相关的获取的精彩视频。

祝你好运

关于iphone - 为什么 NSFetchedResultsController 在设置获取批量大小时加载所有行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7947577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com