ios - dequeueReusableCellWithIdentifier 是强制性的以避免内存泄漏吗?

标签 ios uitableview

我使用几乎每个人都用来处理 cellForRowAtIndexPath 的“著名”样板代码:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"someCustomCellID"];  
if (cell == nil)  // nothing to recycle from the queue: create a new cell

但这给我带来了很多问题,因为我的单元格包含我异步加载的图像,并且这两个功能(出队和异步加载)经常发生冲突。所以我每次都尝试创建一个新单元格并且它运行得很好而且很快。 但我有一个疑问:即使我忽略返回值并每次都创建单元格,我是否仍应调用 dequeueReusableCellWithIdentifier 来释放内存? 我想不再使用的单元会自动解除分配(因为它们应该如此),但我想知道缓存队列是否可能需要显式“释放”与出队调用...

最佳答案

dequeueReusableCellWithIdentifier 不是为了防止内存泄漏而设计的,而是为了性能而设计的(一种方法是减少内存使用)。当使用dequeue方法时,在有几行数据的情况下,滚动table view会顺畅很多。我建议您让异步加载与 dequeue 方法一起使用,尤其是当您在滚动时发现任何延迟时。如果您想了解如何执行此操作的示例,请参阅 Apple's LaxyTableImages Example .但是,如果您确定不想重用单元格,则只需在创建单元格时将 nil 作为 reuseIdentifier 传递即可。

关于ios - dequeueReusableCellWithIdentifier 是强制性的以避免内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9592177/

相关文章:

iphone - 如何在后台iphone中定期调用webservice?

objective-c - 定义一个特定表格单元格的高度

ios - UITextView 的电话号码检测导致 UITableView 崩溃

ios - 无法更改从 Nib 加载的 UIView 的高度

ios - 放大后平移 UIScrollView 的 subview

ios - 自定义 UITableViewCell 内的 UIPickerView 未初始化,awakeFromNib() 未被调用

ios - iOS 8 上的 UITableView 背景黑色和空单元格黑色

ios - 更改后我的框架高度没有更新

ios - 无法在 XCode 中存档 react-native 项目以使用 Pod 进行暂存配置

ios - 如何使用 Swift 遍历 Array<Dictionary<String,String>>