菜鸟教程小白 发表于 2022-12-13 11:10:57

ios - NSCoreData 条目获取的性能


                                            <p><p>例如,我在数据库中有 10 000 个条目,我需要将它们显示到 UITableView 中。</p>

<p>所以,我应该设置所有 NSCoreData 的东西,创建 NSFetchRequest 和 NSFetchedResultsController。</p>

<p>然后我可以使用 方法访问 cellForRowAtIndexPath 中的这些条目。</p>

<p><strong>问题是:</strong> </p>

<ol>
<li>NSFetchedResultsController 是否会以 LAZY 方式加载所有这些对象,只有在用户实际将 UITableView 滚动到相应的单元格之后?</li>
<li>只需将 NSFetchRequest 的 fetchBatchSize 设置为与屏幕上的单元格数相等的数字就足够了吗?</li>
<li>我应该使用单独的 NSManagedObjectContext 和后台线程来加载这些对象吗?在单独线程的情况下, 方法如何工作,而它是从 Main-UI-thread 调用的?</li>
<li>我是否应该担心这些事情,而我只有 10k 个条目?</li>
</ol></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><code>NSFetchedResultsController</code> 为您解决所有问题。</p>

<ol>
<li><strong>延迟加载?</strong>事实上,FRC 会尽量做到延迟加载。没有什么让你做的。实际上,它针对滚动、速度、性能、内存使用进行了优化,应有尽有。</li>
<li><strong>批量大小?</strong>不相关。你可以忘记它。如果您愿意,请设置性能测试并比较使用和不使用 <code>batchSize</code> 的情况。我预测您不会发现任何差异,或者可以忽略不计。 (如果有任何东西可能具有极高的滚动速度。)</li>
<li><strong>单独的 <code>NSManagedObjectContext</code>?</strong> 绝对不行。 <code>NSFetchedResultsController</code> 应该在主线程上使用。 </li>
<li><strong>担心记录数?</strong>您完全不必担心以上原因,尤其是延迟加载。我在 X00.000s 记录方面取得了很好的成绩。 </li>
</ol></p>
                                   
                                                <p style="font-size: 20px;">关于ios - NSCoreData 条目获取的性能,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/32831667/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/32831667/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - NSCoreData 条目获取的性能