Lassen Sie mich Ihnen einen Einblick in meine Anwendung geben.Swift - Wie mehrere Bilder auf einmal (GCD) abrufen?
Um es kurz zu machen, ich erstelle eine Social-Networking-App. Jeder Beitrag besteht aus einem Bild, Profilbild und Bildunterschrift. Jeder Beitrag existiert in meiner MySQL-Datenbank. Ich verwende mein eigenes Framework, um jeden Beitrag abzurufen. Sobald ich jedoch jeden Beitrag abgerufen habe, muss ich noch das Profilbild und Bild mit den URLs abrufen, die ich aus der Datenbank abgerufen habe. Ich möchte alle Bilder auf einmal abrufen, anstatt in der Reihenfolge zu laufen.
Ab sofort gibt es etwa 5 Posts in der Datenbank. Das Laden der notwendigen Bilder für eine Post dauert etwa 4 Sekunden. Im Moment lade ich die Bilder für einen Post und lade dann den nächsten in der Reihenfolge ein. Der gesamte Vorgang dauert also etwa 20 Sekunden. Sagen wir 50 Beiträge, dann dauert es extrem lange, alle Beiträge zu laden. Ich habe etwas Wissen von GCD (Grand-Dispatch-Warteschlangen) aber ich weiß nicht, wie es in meiner App zu implementieren.
Hier ist mein Code meine Beiträge und Bilder zum Abrufen:
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()
}
}
Also meine Frage ist, wie kann ich alle Bilder gleichzeitig abrufen statt einer nach dem anderen abzurufen?
Es wäre toll, wenn jemand eine Erklärung sowie einige Code :)
Ist mein Verständnis korrekt? Sie erhalten die Bilder vom Remote-Service? –
@Melifaro Ja, ich erhalte die Bilder von meinem AWS-Server. –