iPhone 4 iOS 5 NSFetchedResultsController 如何选择批量大小?

Posted

技术标签:

【中文标题】iPhone 4 iOS 5 NSFetchedResultsController 如何选择批量大小?【英文标题】:iPhone4 iOS5 NSFetchedResultsController how to pick batch size? 【发布时间】:2011-11-12 03:02:19 【问题描述】:

我现在有 5 个获取的结果控制器,并且正在添加我的第一个以实际处理数据,而不仅仅是显示它。我希望控制器最多可以管理 150 个对象。我应该选择多大的批量以一次最多处理 5 个对象?是 5 吗?

  - (NSFetchedResultsController *)estimatorEventsController
    
        if (__estimatorEventsController != nil)
        
            return __estimatorEventsController;
        

        /*
         Set up the fetched results controller.
         */
        // Create the fetch request for the entity.
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        // Edit the entity name as appropriate.
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"EstimatorEvent" inManagedObjectContext:self.managedObjectContext];

        [fetchRequest setEntity:entity];

        // Set the batch size to a suitable number.
        [fetchRequest setFetchBatchSize:36];

        // Edit the sort key as appropriate.
        NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"epoch" ascending:YES];
        NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

        [fetchRequest setSortDescriptors:sortDescriptors];

        // Edit the section name key path and cache name if appropriate.
        // nil for section name key path means "no sections".
        NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"EstimatorEvents"];
        aFetchedResultsController.delegate = self;
        self.estimatorEventsController = aFetchedResultsController;


        NSError *error = nil;
        if (![self.estimatorEventsController performFetch:&error])
        

            NSLog(@"Unresolved error __remindersController %@, %@", error, [error userInfo]);
            //      abort();
        

        return __estimatorEventsController;
        

感谢您的帮助!

【问题讨论】:

【参考方案1】:

亚历克斯,

我的提取结果控制器中有 800 多个项目,并且不批量提取。不用担心 150 项……你知道,过早的优化等等。

要记住的另一件事是批量限制是在获取请求上,而不是在获取结果控制器上。这种区别很重要,因为获取请求是一个较低级别的项目,可以轻松触发包含数千个项目的结果数组。必须小心处理这种大小的查询。 150 行没什么大不了的。

安德鲁

【讨论】:

你的意思是没有设置这个属性:[fetchRequest setFetchBatchSize:36];? Alex,除非你的 150 件物品都是大块,否则就全部拿走。有史以来最小的 ios 设备为您提供了 20 MB 的工作空间。所有 Mac OS X 设备都更大。 CD 性能的一个秘诀是将内容放入 RAM 并在那里进行复杂的查询。因此,仅当您知道自己不适合 RAM 时才限制 CD。安德鲁【参考方案2】:

我没有一个非常明智的答案,但似乎大多数指南似乎都建议您加载大约两到三倍的单元格,因为任何时候都会出现在屏幕上,所以如果您有一次在表中可见五个,然后可能是 15 个?这是在不一次加载所有内容的好处与没有太多获取请求的好处之间取得平衡,因为它们有一些负载和延迟,并确保您已经有一些尚未在屏幕上预取的单元格在突然发生时响应快速滚动。

【讨论】:

滚动方面相当容易。我对计算方面很感兴趣。我如何为计算目的选择批量大小,而不仅仅是滚动?

以上是关于iPhone 4 iOS 5 NSFetchedResultsController 如何选择批量大小?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 4 iOS 5 NSFetchedResultsController 如何选择批量大小?

推送通知在 iPhone 3GS 中不起作用。它适用于最新的 IOS 设备,如 iPhone 4、4s、5

我可以使用 iPhone 5(版本 10.3.4)进行 Flutter iOS 调试吗?

为 iOS 4 App 添加 iPhone 5 xib

带有 iOS 5.0 的 Xcode 4.2 未检测到 iPhone iOS 5.1.1

iphone:使用 iOS 5 和 Xcode 4.2 提交应用程序? [关闭]