2016-07-13 1 views
0
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()). Я новичок в быстроте. Пожалуйста, помогите мне понять это. Заранее спасибо.Использование dispatch_async полезно в willDisplayCell

+0

Пожалуйста, уточните, что вам нужно. –

+0

Спасибо, что обратили внимание. Мне ничего не нужно. Попытка понять несколько строк кода. – Avi

ответ

1

Идея отправки из главной очереди обратно в главную очередь - сказать: «Я не хочу что-то делать сейчас, но вот что я хочу сделать в следующей итерации цикла запуска». В этом случае этот метод вызывается непосредственно перед отображением ячейки, поэтому он выглядит так, как будто автор пытается обновить ячейку, которая еще не видна, поэтому они хотят отложить блок до тех пор, пока ячейка не будет показана.

Это немного зависит от того, что происходит внутри этого блока, но у этого есть немного запаха кода. Мы склонны использовать этот хитроумный трюк, когда нет более прямого и интуитивного способа достижения желаемого эффекта. В этом случае я бы поставил под вопрос, может ли код в этом блоке отправки быть лучше в cellForRowAtIndexpath.

Кроме того, использование unowned против weak также является немного тревожным (что, если вы щелкнули пальцем, и там был прокрутка, и пользователь уволил сцену, пока анимация все еще продолжалась). Возможно, все в порядке, но здесь может быть какая-то гонка.