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

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

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

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

最佳答案

我建议修改您的方法。如果您的服务器没有问题 - 它不忙并且可以很好地访问,因此资源下载受设备网络适配器带宽 (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 应用程序。

关于ios - Swift - 如何一次检索多个图像(GCD)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37063648/

相关文章:

ios - Storyboard中带有 UIButtons 的 PaintCode 2

ios - 在后台队列中保存临时管理对象上下文

ios - 在 Swift SpriteKit 项目中播放声音?

iphone - 降低速度将UIView旋转360度以上

php - Laravel 上传时如何为图像指定唯一的名称?

swift - 将一个类标记为 final 是否也会使每个函数最终化?

ios - SwiftUI - 过渡动画在 GeoReader 中不起作用?

ios - 滚动scrollview和tableview冲突

javascript - 使用 JavaScript FileReader 显示图像

java - 显示图像