Swift - 如何一次检索多个图像(GCD)?

时间:2016-05-06 03:18:46

标签: ios swift image grand-central-dispatch

让我给你一些关于我的应用程序本身的见解。

简而言之,我正在创建一个社交网络应用程序。每个帖子都包含图片个人资料图片标题。每个帖子都存在于我的MySQL数据库中。我正在使用自己的框架来检索每个帖子。但是,一旦我检索到每个帖子,我仍然需要使用从数据库中检索到的URL来检索个人资料图片图像我想一次检索所有图片,而不是按顺序运行。

截至目前,数据库中约有5个帖子。为一个帖子加载必要的图片大约需要4秒钟。所以现在我正在为一个帖子加载图像,然后按顺序检索下一个。所以整个过程大约需要20秒。所以说有50个帖子,那么加载所有帖子需要很长时间。我对 GCD(grand-dispatch-queues)有一些了解但是我不知道如何在我的应用程序中实现它。

以下是我检索帖子和图片的代码:

ConnectionManager.sharedInstance.retrievePosts(UserInformationInstance.SCHOOL) {
        (result: AnyObject) in
        if let posts = result as? [[String: AnyObject]] {
            print("Retrieved \(posts.count) posts.")
            for post in posts {
                let postIDCurrent = post["id"] as? Int
                var UPVOTES = 0;
                var UPVOTED: Bool!
                var query = ""

                if let profilePictureCurrent = post["profile_picture"] {
                    // Loading profile picture image

                    let url = NSURL(string: profilePictureCurrent as! String)
                    let data = NSData(contentsOfURL: url!)
                    let image = UIImage(data: data!)
                    UserInformationInstance.postsProfilePictures.append(image!)
                    print("added profile pic")
                } else {
                    print("error")
                }
                if let postPictureCurrent = post["image"] {
                    if (postPictureCurrent as! String != "") {
                    // Loading image associated with post

                    let url = NSURL(string: postPictureCurrent as! String)
                    let data = NSData(contentsOfURL: url!)
                    let image = UIImage(data: data!)
                    let imageArray: [AnyObject] = [postIDCurrent!, image!]
                    UserInformationInstance.postsImages.append(imageArray)
                    print("added image pic")
                    }
                } else {
                    print("error")
                }
                UserInformationInstance.POSTS.append(post)
            }
        } else {
            self.loadSearchUsers()
        }
    }

所以我的问题是,我如何能够同时检索所有图像而不是一个接一个地检索?

如果有人可以提供解释以及一些代码,那就太好了。)

1 个答案:

答案 0 :(得分:1)

我建议修改你的方法。如果你的服务器很好 - 它不忙并且可以很好地访问,因此资源下载受到设备网络适配器带宽(X mbps)的限制,那么你下载图像的方式并不重要 - 无论是同时还是后续。

让我说明一下。同时下载大小为Y mb的10个文件的时间等于下载一个文件的时间,但在这种情况下,每个文件的下载速度将慢10倍:

X/10 - downloading speed per one file
Time = Amount / Speed
T = Y / (X/10) = 10 * Y / X

现在,如果您正在下载:

T = 10 * (Y / X) = 10 * Y / X

我建议您在从存储中重新发布帖子后立即显示帖子,然后您需要异步启动图像下载并在下载后设置图像。这是业界最好的做法,考虑Facebook,Twitter,Instagram应用程序。