我的印象是,表格視圖單元格從來沒有得到處理,直到應用程序崩潰,因爲你可以重用它們。但是當我分析我的表格視圖時,我意識到在我的自定義單元格上調用了dealloc。到底是什麼dealloc的自定義單元格,我可以阻止它?什麼時候自定義表格視圖單元dealloc?
回答
使用常見的「重用」圖案:
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellId = @"Foo";
UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:cellId];
if (!cell) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId]
autorelease];
}
// update the cell content
return cell;
}
表視圖創建根據需要來填充它的框架的高度的許多細胞。
當從屏幕消失時,它們將從視圖中移除並放入重用隊列中,從而不會釋放。
當tableView被解除分配時,所有的單元格都會被釋放,並且當您的行數發生變化時(例如,您之前有20個單元,更新之後只有2個單元),某些單元可能會被釋放。
您可能會想要擺脫細胞重用,但您會失去所有背後的魔法,以保持較低的內存佔用量並具有平滑的滾動體驗。
dequeueReusableCellWithIdentifier:
選擇器的語義是不透明的(據我所知)。如果要完全控制表格視圖單元格,請不要使用該選擇器來獲取單元格:只需構建一個新單元格或使用自己的池進行重用。
但無論如何,它不應該釋放它,它應該重用它。唯一的原因是我不想再次從筆尖加載,這會降低應用程序的速度。 – TheBinaryhood
表視圖根據需要創建和刪除單元格。這是爲了允許非常長的列表滾動而不將它們全部存儲在內存中。一個幾乎無限的可滾動列表是可能的。爲表格視圖的使用壽命保留自定義單元格的一種便捷方式是在創建時將它們添加到可變數組中。在創建之前,查看數組以查看它是否已經存在。
但是,如果我預先加載它們,我可以抓住單元格並複製它嗎?如果不是,那意味着我需要一個幾乎無限的單元陣列。 – TheBinaryhood
您可以預加載它們,也可以根據需要創建它們。你不需要無限的單元格陣列。只需使用一個NSMutableArray並根據需要添加它們即可。如果沒有別的,它會讓他們保留給你。 –
- 1. 什麼時候從筆尖發佈自定義單元格
- 2. 自定義單元格的表視圖
- 3. 靈活的表格視圖單元格自定義視圖
- 4. 當單元格插入表格時,自定義表格視圖單元格內的圖像視圖消失
- 5. iOS版表格視圖單元格自動高度自定義的子視圖
- 6. 自定義表格視圖中的空單元格
- 7. 自定義表格視圖單元格選擇字體顏色
- 8. 無法重用表格視圖中的自定義單元格
- 9. 實現自定義表格視圖單元格
- 10. 自定義單元格的表格視圖(編程)
- 11. iPhone中表格視圖中的自定義單元格
- 12. iOS 7自定義單元格不顯示在表格視圖
- 13. 自定義表格視圖單元格顯示空白
- 14. 查看錶格視圖(自定義tableview單元格)
- 15. 如何將自定義表格單元格視圖導入NSTableView?
- 16. Swift中沒有Storyboard的自定義表格視圖單元格
- 17. 無法刪除自定義表格視圖單元格
- 18. 故事板中的自定義表格視圖單元格
- 19. 刪除表格視圖中的自定義單元格
- 20. 自定義表格視圖單元格與TextField問題
- 21. iOS的自定義表格視圖單元格是空
- 22. 自定義視圖或自定義單元格
- 23. JavaFX8樹表視圖自定義單獨的單元格
- 24. 生成自定義表格視圖,表格視圖單元格不能放入表格視圖行
- 25. Segueing自定義視圖單元格到自定義視圖控制器
- 26. 自定義表格視圖單元格的單元重用問題
- 27. 從自定義表格視圖單元格中推送視圖Xcode 4
- 28. 在自定義表格視圖中嵌入集合視圖單元格
- 29. iPhone:如何dealloc自定義單元格標籤
- 30. 當選擇表格視圖單元格時顯示自定義UIImageView
謝謝,整個更新行是有道理的 – TheBinaryhood