dataWithContentsOfURL
- синхронный сетевой запрос. Это означает, что там, где вызывается ваш код, он будет ждать завершения запроса, прежде чем перейти к следующей инструкции. Синхронная сеть это плохо . Действительно плохо. Это действительно реально работает только в тестировании.
Что вам следует делать, так это запускать асинхронные запросы для этих изображений. Причина, по которой ваш код ужасно медленный, заключается в том, что каждый раз, когда tableView
запрашивает у своего делегата источника данных cellForRowAtIndexPath:
; Ваш код синхронно запускает сетевой запрос - это означает, что ячейка не будет возвращена, пока сетевой запрос изображения не будет завершен.
Вместо этого вам следует либо асинхронно загружать все изображения при запросе tableView
. Вот хороший пример , который использует теги для идентификации их при возврате. Это непросто во всем контексте того, что вы делаете; поэтому, возможно, вы захотите запустить все NSURLConnections, когда отображается tableView
, верните 0
для numberOfSectionsInTableView
до тех пор, пока соединения не будут завершены, затем вызовите reloadData
для tableView
, когда они все будут завершены (и выполните команду numberOfSectionsInTableView
теперь возвращает правильное количество строк для отображения).