在做了一些調試之後,我發現下面的代碼會讓我的應用程序的內存使用量不斷增長,直到應用程序崩潰。當我啓動應用程序時,內存使用量約爲2MB,然後當我不停地滾動時,它會繼續增長。當我停止滾動一秒鐘時,內存使用量會減少(但不是關鍵的,例如從50M到35M)。請看看爲什麼我:UICollectionView迭代單元格 - 內存警告
這是在我的自定義UICollectionViewController子發生:
for (myAppCell *cell in [self.collectionView visibleCells])
{
UILabel *label [[UILabel alloc] initWithFrame:CGRectMake(10, 10, cell.frame.size.width, cell.frame.size.height)];
label.text = @"Hello World!";
[cell.contentView addSubview:label];
}
現在,這裏是我在調試時提出的意見:
- 如果我評論所有的代碼,並且在無限的時間內來回滾動,應用程序內存穩定在2.1MB(在這種情況下,它繼續循環但實際上沒有內部 - 因此問題必須與UILabel的分配有關) 。
- 我試圖檢查收集視圖和單元格的子視圖計數,他們分別是14和1(因爲它應該是 - 所以問題不是我認爲子視圖的積累)。
- ARC已打開。
- 編輯:實際上,只有當我將UILabel添加到單元格時纔會出現問題。當我評論最後一行時(
[cell.contentView addSubview:label
),應用程序也正常運行。因此它必須是這條線。 - 編輯:順便說一下,我不去除細胞一次他們是無形的(我不知道該怎麼辦,如果我真正需要做的,我是相當新的IOS編程)。
現在,因爲正如我所說的,當我註釋掉內部塊的應用程序正常運行,我沒有張貼代碼的,其剩餘的 - 也就是說,它創建我的細胞,當我滾動沒有問題(內存遺體在2.1MB)。
可能是什麼問題?
編輯
此代碼位於我CustomCollectionViewController
的reloadData
方法。它從scrollViewDidEndDecelerating
方法調用。
在該方法中,你通過所有可見的單元格,添加這個標籤迭代?什麼觸發你的這個''for'循環?你說你在你的子類中這樣做,但你沒有說在哪裏。 – Rob
@Rob我編輯了這個問題。 – Shaokan
您是不是使用'cellForItemAtIndexPath'將子視圖添加到您的單元格? – Merlevede