UI不会立即更新iOS

时间:2015-01-13 21:37:30

标签: ios xcode multithreading user-interface swift

我的代码如下:

var images = [UIImage]()
var isFirstLoop = true
for (imageID in self.imageID’s)
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORIT Y_DEFAULT, 0), {
        let imageToAdd = self.getImageFromUrlByID(imageID)
        if isFirstLoop
        {
            self.addSubView(imageToAdd)
            isFirstLoop = false
        }
    }
}

我只是无法解释为什么第一个图像在所有任务完成后被添加为subView ....我试图用任何可能的dispatch_async与主线程的组合来包装addSubView,所以上... 它需要很长时间才能将图像添加为subView ..请帮帮我:) 提前致谢!! :)

2 个答案:

答案 0 :(得分:3)

始终 从主线程更新用户界面。

答案 1 :(得分:1)

仅包含实际更新UI的dispatch_get_main_queue。如果您的方法getImageFromURLByID()访问互联网,我认为它确实存在,那么您就不希望在UI线程上有任何连接,因为它通常会将其冻结。

for imageID in imageIDs
{
    let imageToAdd = self.getImageFromUrlByID(imageID)

    if isFirstLoop {
        dispatch_async(dispatch_get_main_queue() {
            var imageView = UIImageView(image: imageToAdd)
            imageView.frame = someFrame
            self.addSubView(imageView)
        }
        isFirstLoop = false
    }
}