在willDisplayCell中使用dispatch_async非常有用

时间:2016-07-13 17:46:59

标签: ios swift grand-central-dispatch

    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    dispatch_async(dispatch_get_main_queue()) { [unowned self] in

        //call some method in cell to pass data and update labels/images on cell
    }
}

我相信willDisplayCell总是在主线程上调用。那么我使用dispatch_async(dispatch_get_main_queue())实现了什么。我是斯威夫特的新人。请帮我理解这个。提前谢谢。

1 个答案:

答案 0 :(得分:2)

从主队列调回主队列背后的想法是说“我现在不想做某事,但这是我想在下一次运行循环迭代中做的事情。”在这种情况下,在显示单元格之前调用此方法,因此看起来作者正在尝试更新尚未可见的单元格,因此他们希望推迟块直到实际显示单元格。

这取决于该块内部的内容,但这有点代码味道。当没有更直接和直观的方法来达到预期的效果时,我们倾向于使用这种愚蠢的技巧。在这种情况下,我会质疑该调度块中的代码是否可能更好地属于cellForRowAtIndexpath

此外,unowned vs weak的使用也有点令人担忧(如果您轻弹手指并且正在进行滚动并且用户在动画仍在进行中时解散了该场景,该怎么办? )。可能没关系,但这里可能存在某种竞争条件。