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

Swift - How to retrieve multiple images at once (GCD)?

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

简而言之,我正在创建一个社交网络应用程序。每个 post 由 图片个人资料图片 说明 组成。每个 post 都存在于我的 MySQL 数据库中。我正在使用自己的框架来检索每个 post。但是,一旦我检索到每个 post,我仍然必须使用从数据库检索到的 URL 来检索 个人资料图片 图片 . 我想一次检索所有图像,而不是按顺序 运行。

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

这是我检索 post 和图像的代码:

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()
        }
    }

所以我的问题是,我怎样才能同时检索所有图像而不是一个接一个地检索?

如果有人能给出解释和一些代码就太好了:)

我建议修改您的方法。如果您的服务器正常 - 它不忙且可达,因此资源下载受设备网络适配器带宽 (X mbps) 限制,那么您下载图像的方式并不重要 - 并发或顺序。

让我展示一下。同时下载10个大小为Y mb的文件的时间等于下载一个文件的时间,但这种情况下每个文件的下载速度会慢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 应用程序。