我在我的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
你不需要一個斷點。只需點擊調試控件中的「暫停」按鈕即可。 –