#swift #firebase #dispatch-async
#swift #firebase #отправка -асинхронная
Вопрос:
Я пытаюсь загрузить несколько сообщений с изображениями из Firebase и отобразить их в моем tableview. В приведенном ниже коде я замечаю, что tableview загружается только после загрузки каждого изображения из вызова функции preLoadImage. Я вызываю весь вызов loadDataFromFirebase() в другом вызове dispatch_async. Что я здесь делаю не так? Разве функция предварительной загрузки изображения не должна выполняться в фоновой очереди, а tableview загружается немедленно?
Прямо сейчас я вижу это из журналов, поэтому могу сказать, что сначала загружаются все изображения размером более 1 МБ, а затем загружается tableview. Спасибо Еще Еще Еще Еще Еще изображения Изображения изображения Изображения изображения Изображения изображения Изображения изображения Еще Еще Еще Еще Еще изображения в TableView
// loadDataFromFirebase is being called from another dispatch_async call
func loadDataFromFirebase() {
print("Global: Loading data from Firebase")
// code to retrieve data.
self.globalPost.insert(userPost, atIndex: 0)
//helps imageloading -- this is the one that causes the delay
self.preLoadImage(userPost.userImage)
print ("Obtained DATA in loadDataFromFirebase")
}
// image loading - this is called in a background queue but until the download here doesn't finish my tableview does not load.
func preLoadImage(image: String) {
if (image != "") {
dispatch_async(dispatch_get_main_queue(), {
UIImage.cachedImageWithURL(image)
print ("Downlading image")
})
}
}
Комментарии:
1. Интересно, есть ли способ ограничить количество изображений, загружаемых в фоновом режиме, вместо загрузки всех изображений.
Ответ №1:
Использование этого в preLoadImage () исправило это. Правильно ли это выглядит?
if (image != "") {
dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)) {
UIImage.cachedImageWithURL(image)
print ("Downlading image")
}