许多 UIViews + QLViewController = 性能非常慢

Posted

技术标签:

【中文标题】许多 UIViews + QLViewController = 性能非常慢【英文标题】:Many UIViews + QLViewController = very slow performance 【发布时间】:2013-12-16 22:32:45 【问题描述】:

我正在构建一个日历控件。尽管使用了 数百 个 UIView(示例图像中的每个单元格都是一个 UIView),但它通常运行良好且响应迅速。

http://i.stack.imgur.com/6g1hQ.png

我遇到了将日历放入应用程序的问题。它被其他一些控件完全遮挡,最后被 Quick Look 视图控制器遮挡。 快速查看关闭后应用需要很长时间(10 秒)才会出现响应。

Quick Look 以外的任何视图都没有缓慢症状

任何帮助将不胜感激。

【问题讨论】:

介意分享一些代码吗? 你是在使用 UICollectionView 还是某种单元重用架构来在滚动这个怪物时保持低内存占用? 抱歉耽搁了,我猜 SOF 没有给我发送通知。 我认为我无法向您展示任何有用的代码。日历是用一个相当复杂的抽象层创建的,这使得 UI 平台无关。日历没有使用单元重用架构,因为大约 50% 的单元在任何给定时间都是可见的。我已经尝试将控件的数量限制为仅可见的控件,虽然它确实使延迟更短,但这不是解决方案;也就是说,它可以稍后作为优化来完成,但不是问题的主要贡献者。 【参考方案1】:

问题在于自动布局。它根本无法处理超过试验数量的视图。每个嵌套视图都会以指数方式影响渲染时间。

我最终编写了自己的“MagicLayout”系统来完成同样的工作,但它需要大约 500 毫秒而不是 10000 毫秒。关闭 ViewController 的时间从 10 秒变为大约 10 毫秒

即将登陆您附近的 Xamarin 组件商店。

【讨论】:

以上是关于许多 UIViews + QLViewController = 性能非常慢的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollview 仅在拖动 uiviews 时滚动

通过在它们上方移动另一个 UIView 来获取所有 UIViews

是否可以定义相对于未知 UIViews 的自动布局约束?

执行许多 UIKit 操作阻塞主线程

使用标签/UILabels/UIViews

使用 UIViews 而不是 UIViewControllers 时可能出现的问题?