菜鸟教程小白 发表于 2022-12-13 05:46:23

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:@&#34;FailedBankInfo&#34; inManagedObjectContext:managedObjectContext];
    ;

    NSSortDescriptor *sort = [
      initWithKey:@&#34;details.closeDate&#34; ascending:NO];
    ];

    ;

    NSFetchedResultsController *theFetchedResultsController =
      [ initWithFetchRequest:fetchRequest
            managedObjectContext:managedObjectContext sectionNameKeyPath:nil
            cacheName:@&#34;Root&#34;];
    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]
查看完整版本: ios - NSFetchedResultsController 性能不佳