我使用几乎每个人都用来处理 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/