让我给你一些关于我的应用程序本身的见解。
简而言之,我正在创建一个社交网络应用程序。每个帖子都包含图片,个人资料图片和标题。每个帖子都存在于我的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()
}
}
所以我的问题是,我如何能够同时检索所有图像而不是一个接一个地检索?
如果有人可以提供解释以及一些代码,那就太好了。)
答案 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应用程序。