gpt4 book ai didi

ios - NSFetchedResultsController 性能不佳

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:44:25 25 4
gpt4 key购买 nike

我正在尝试将项目从 CoreData 加载到 UITableView 中。我最初的做法是简单地从我的 BankInfo 实体中获取所有对象,将它们填充到一个数组中,然后使用该数组填充 UITableViewCells:

- (NSMutableArray *) bankInfos
{
NSManagedObjectContext *context = [self managedObjectContext];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"BankInfo" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSError *error;
NSMutableArray *bankInfos = (NSMutableArray*)[context executeFetchRequest:fetchRequest error:&error];
return bankInfos;
}

我听说 NSFetchedResultsController 可以提高性能/内存管理,所以我尝试了一下(基本上按照 Ray Wenderlich tutorial 推荐的方式实现):

- (NSFetchedResultsController *)fetchedResultsController {

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

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"FailedBankInfo" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"details.closeDate" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];

[fetchRequest setFetchBatchSize:20];

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

return _fetchedResultsController;

}

在使用工具分析代码后我发现 NSFetchedResultsController 将对象加载到 UITableView 的时间大约是我初始方法的两倍曾是。特别是这一行:

BankInfo *bankInfo = [_fetchedResultsController objectAtIndexPath:indexPath]; 

需要 292 毫秒,而加载整个 BankInfos 数组大约需要 150 毫秒。有谁知道这是为什么吗?

最佳答案

我遇到的问题与 CoreData 性能无关,但与我不小心将全尺寸图像保存/加载为 TableView 中的缩略图有关。一旦我解决了这个问题,性能问题就消失了。

关于ios - NSFetchedResultsController 性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20819472/

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