ios - NSFetchedResultsController 性能不佳
<p><p>我正在尝试将 <code>CoreData</code> 中的项目加载到 <code>UITableView</code> 中。我最初的做法是简单地从我的 <code>BankInfo</code> 实体中获取所有对象,将它们填充到一个数组中,然后使用该数组来填充 <code>UITableViewCells</code>:</p>
<pre><code>- (NSMutableArray *) bankInfos
{
NSManagedObjectContext *context = ;
NSFetchRequest *fetchRequest = [ init];
NSEntityDescription *entity = ;
;
NSError *error;
NSMutableArray *bankInfos = (NSMutableArray*);
return bankInfos;
}
</code></pre>
<p>我听说 <code>NSFetchedResultsController</code> 可以提高性能/内存管理,所以我尝试了一下(基本上按照 <a href="http://www.raywenderlich.com/999/core-data-tutorial-for-ios-how-to-use-nsfetchedresultscontroller" rel="noreferrer noopener nofollow">Ray Wenderlich tutorial</a> 推荐的方式实现):</p>
<pre><code>- (NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [ init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"FailedBankInfo" inManagedObjectContext:managedObjectContext];
;
NSSortDescriptor *sort = [
initWithKey:@"details.closeDate" ascending:NO];
];
;
NSFetchedResultsController *theFetchedResultsController =
[ initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext sectionNameKeyPath:nil
cacheName:@"Root"];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;
return _fetchedResultsController;
}
</code></pre>
<p>使用工具分析代码后,我发现 <code>NSFetchedResultsController</code> 将对象加载到 <code>UITableView</code> 所需的时间大约是我的初始方法的两倍曾是。特别是这一行:</p>
<pre><code>BankInfo *bankInfo = ;
</code></pre>
<p> 需要 292 毫秒,而加载整个 <code>BankInfos</code> 数组大约需要 150 毫秒。有谁知道这是为什么?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>我遇到的问题与 CoreData 性能无关,但与我不小心将全尺寸图像保存/加载为表格 View 中的缩略图有关。一旦我解决了这个问题,性能问题就消失了。</p></p>
<p style="font-size: 20px;">关于ios - NSFetchedResultsController 性能不佳,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/20819472/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/20819472/
</a>
</p>
页:
[1]