iOS * Cell性能:Autolayout vs Frame?

我正在使用单元格的自动布局(UITableViewCell和UICollectionViewCell),但是当重复使用单元格时我注意到了显着的性能缺陷,我想知道我该怎么做才能改进它.

也许这是由于我创建/配置单元格的方式,在我的应用程序中我需要将书籍显示为单元格,不同的书籍类型有不同的布局,但我只有一个BookCell,我在创建单元格时重新配置约束/根据书的类型重用特定的书.

根据我的理解,在我的情况下,自动布局应该比固定帧慢,因为步骤如下:

自动布局

>删除当前约束
>根据书籍的类型重新添加约束
>设置书籍的所有标签/图像视图

我认为在第2步内部iOS将重新运行约束求解器,并且在步骤3将重新调整约束(即重新运行求解器)以满足所有具有文本和图像集的标签和图像视图.

固定布局

(具有标签,图像视图,不同类型的不同帧列表)
1.重新设置所有标签’,图像视图’的框架
2.设置标签的文本和图像视图图像

我需要一些时间来将所有自动布局单元转换为使用固定框架,而我能想到的是为了提高性能

>复制通用BookCell,并为每个类型创建一个单元格.
>在设置约束之前设置所有标签,图像视图
>对此不太确定,我应该在updateConstraints方法中还是在初始化程序中添加自动布局约束(例如initWithTableViewCellStyle:reusableIdentifier :)?

非常感谢!

解决方法

自动布局转换为帧将非常耗时,并且性能最低.在iOS7中开发时更不用说并发症了. (请参阅此 here).的其他答案

正如Kugler的study所示,自动布局应该足够快.不要忘记,框架或自动布局,这一切都归结为数学计算,现代cpu非常擅长.

在你的情况下,我会建议采用不同的方法.首先,检查您是否正确操作约束,并在正确的位置.这意味着updateConstraints和updatedViewConstraints.添加删除约束是一项昂贵的操作.但实际上,你应该只通过这些方法在视图创建上做一次.不要忘记检查是否已经创建了约束,这样就不会通过重复添加来获得异常.

另外,请记住,如果只是更新常量,则无需添加删除约束.你可以在上述方法之外做的事情.

接下来,考虑表视图发生了什么.它滚动得很快,而且cellForRowAtIndexPath要求下一个单元格.在你的情况下,细胞看起来都很不一样.要解决此问题,请为每个变体使用不同的reuseIdentifier.

只要您填充单元格的数据操作很少,您可能会在初始单元格创建时看到一点点不寒而栗.然而,此后滚动应该非常平滑.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...