我在我的swift iOS应用程序中遇到问题,我无法理解哪个是真正的问题。我有一个UITabBarController在每个选项卡上有五个UINavigationController。这些控制器的主要内容是UICollectionView从具有自定义UICollectionViewCells(每个CollectionView约30个)的WebService动态填充自定义UIImageViews,自定义UILabels和从自定义xib文件加载的自定义UIButtons。iOS冻结了UI,没有错误日志
当我推动几个控制器都运行良好(CollectionViews变得有点慢,但我认为这是正常的内存使用情况),但是当一个NavigationController包含6或7控制器,我尝试向下滚动,我的UI冻结,应用程序不会崩溃,我不会收到任何类型的运行时错误。我仍然可以使用主页按钮退出,但应用程序已完全锁定。
我出列与标识每一个的CollectionView的每一个细胞,我使用这个属性在每一个自定义单元格的表现:
layer.shouldRasterize = true
layer.rasterizationScale = UIScreen().scale
我试图
- 调试视图太看看一些UIWindow或UIView是否覆盖控制器视图
- 停止图像加载并显示空白imageViews
- 在UICollectionView滚动委托方法用于清除代码
但问题始终是第六或第七控制器可重复性,使得一些压力测试。我也看过FPS,但价值总是从40到60,看起来不错。 CPU使用率总是非常高,90/100%,但方法didReceiveMemoryWarning永远不会被解雇。
我的目标是我的应用可以在不冻结的情况下推送很多控制器,或者变得非常慢,但是我无法理解我错过了什么。
当应用程序冻结时,使用调试器暂停它。看看主线程的堆栈跟踪,看看它在做什么。 –
由于冻结是随机的,我不知道在哪里放置断点。我在应用程序委托中尝试过,但我不知道在那一刻堆栈跟踪是否会受到影响。 – lubilis
你不需要一个断点。只需点击调试控件中的“暂停”按钮即可。 –