UICollectionView reloadData后cell

2023-09-27  本文已影响0人  Wesson

背景

在iPhone6s plus机型上,UICollectionView reloadData之后,出现UICollectionViewCell被隐藏,查看cell的hidden属性均为YES。

问题定位和猜测

因为起初在相对高端的机型(例如iPhoneX,iPhone14)上,都没有出现过这样的问题,只在iphone6s上遇到了这个问题。这台iphone6s plus测试机十分卡顿,硬存内存都不多。同样的代码,在高端机型上ok,排除了代码存在的bug,所以首先怀疑:是不是机器的性能不够?因为如果当前runloop提交了过多的UI更新的话,在UI update阶段,可能处理不完,导致有些UI更新的任务被抛弃,导致cell的正常显示受到影响。

查资料的过程中,看到这位老哥的博客:https://www.cnblogs.com/elladu/p/5953261.html#!comments,将reloadData任务放在主线程后执行,玄学地就解决了问题。

下面给出一种可能的解释:
虽然当前代码已经在主线程上执行了,但是由于可能提交了过多的UI任务,会导致部分任务被抛弃。
而主动将任务放在主队列执行,dispatch_async带的block的代码会在下一个runloop才执行,这样就避免了当前runloop任务过于繁重导致任务被抛弃的问题。

上一篇 下一篇

猜你喜欢

热点阅读