不断更新 TableView 中单元格内的数据

Constantly update data inside cell in TableView

我需要不断更新单元格内的数据(它是 "published ago timer")。我可以在单元格内添加 NSTimer 事件,每秒将标签更新为实际数据,但我认为这会造成内存泄漏。

如您所知,当单元格未显示时,它不会加载到内存中,因此如果用户向下滚动,上方的单元格就会从内存中卸载。但是定时器会永久存在吗?

如果 cellView 从 view/memory 卸载,我可以 .invalidate() 计时器,但我不知道卸载 NSTableCellView(或 NSView)时调用什么函数。

在您的自定义单元格中,使用 deinit {} 使之无效。

此外,上层单元不会从内存中释放,而是在需要时取出。因此,请务必在自定义单元格的 prepareForReuse 中重置计时器(如果需要)。

不要将定时器放在单元格中,将一个定时器放入控制器中,这样可以更新所有可见单元格:

- (void)timerFired {
    for (UITableViewCell *cell in self.tableView.visibleCells) {
        [cell doNecessaryViewUpdate];
    }
}

我找到了更新所有单元格中数据的方法(更改单元格的 class 名称和 table):

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),使用