我需要不断更新单元格内的数据(它已经发布了计时器")。我可以在单元格中添加NSTimer事件,每秒更新标签到实际数据,但我认为它会造成内存泄漏。
如您所知,当单元格未显示时,它未被加载到内存中,因此如果用户向下滚动而不是从上部单元格卸载内存。但定时器会永久存在吗?
如果cellView从视图/内存中卸载,我可以.invalidate()
计时器,但是我不知道在卸载NSTableCellView(或NSView)时调用了什么func。
答案 0 :(得分:4)
不要将定时器放到单元格中,将一个定时器放入控制器中,以更新所有可见单元格,如下所示:
- (void)timerFired {
for (UITableViewCell *cell in self.tableView.visibleCells) {
[cell doNecessaryViewUpdate];
}
}
答案 1 :(得分:0)
在自定义单元格中,使用deinit {}
无效。
此外,鞋面细胞不会从记忆中释放出来,而是在需要时会被释放。因此,请务必在自定义单元格的prepareForReuse
中重置计时器(如果需要)。
答案 2 :(得分:0)
我找到了更新所有单元格数据的方法(更改单元格和表格的类名称):
updateDateInCellsTimer = NSTimer.scheduledTimerWithTimeInterval(30, target: self, selector: "updateDateInCells", userInfo: nil, repeats: true)
func updateDateInCells() {
for var row = 0; row < tableView.numberOfRows; row++ {
guard let cell = tableView.viewAtColumn(0, row: row, makeIfNecessary: false) as? NSTableCellView else { continue }
// here you can do anything, cell is your cell reference
}
}
它适用于NSTableView。如果您想在iOS上使用它(有UITableView),请使用answer of @Kai Huppmann.