UITableViewCell对象deinit从未调用过

时间:2015-10-19 09:08:27

标签: swift uitableview memory-management deinit

问题出在我的项目中。但我也尝试了新的xcode草案项目,即Master-Detail Application一个。

我创建了基本的Cell类并在故事板上映射了单元格。删除操作后,deinit从未调用过。对细胞的任何引用都没有强弱。

class Cell:UITableViewCell {
    deinit{
        print("Deinit Called")
    }
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! Cell

    let object = objects[indexPath.row] as! NSDate
    cell.textLabel!.text = object.description
    return cell
}

1 个答案:

答案 0 :(得分:3)

UITableViewCells作为一个惰性var工作,它们在第一次使用时被初始化,并且只要初始化它们的UITableView处于活动状态,它就会保持活动状态,这发生在寄存器:forIdentifier:被调用的那一刻。如果您正在使用故事板,那就是为您完成的。

为什么要这样做?可以使用dequeueReusableCellWithIdentifier重新使用每个单元格,因此UITableView会保留一个实例,以便在需要时使用。

如果您需要清理一些数据,只需在UITableViewCell上调用prepareForReuse