如何在不阻塞主线程/ UI的情况下快速将节/项插入UICollectionView?

时间:2016-10-06 12:26:39

标签: ios uicollectionview uikit realm grand-central-dispatch

我有一个在后台运行的进程,它会在几分钟内添加大量Realm条记录。我还有一个UICollectionView,其数据源连接到这些Realm记录的List。我添加了一个Realm通知,以便在添加新记录时调用insertItems(at:)

问题在于,由于背靠背有很多插入,主线程几乎总是等待insertItems(at:)调用才能完成。因此,在插入完成之前,应用完全无响应。

首先,我觉得insertItems(at:)花了这么长时间似乎很奇怪,因为只有最初的0.05%的记录甚至可见,所以我会认为UIKit会被优化而不会做一堆屏幕外的细胞工作。它会为每个单元格调用collectionView(_:layout:sizeForItemAt:),即使它们不在屏幕上也是如此。我很惊讶UIKit不喜欢在不在屏幕上甚至接近屏幕的小区上调用这种委托方法。我认为需要知道目前可见单元格以下的单元格大小的唯一原因是滚动指示器的大小和动画可以更准确。

由于显然UICollectionView正在为每个IndexPath插件工作,即使没有必要(我希望我错了),我想知道是否有人建议如何构建它以便在不阻止UI的情况下,仍可以尽快添加记录。也许有一种方法可以用GCD或其他方式对它进行不同的构造?

0 个答案:

没有答案