[英]populate UITableView with Json image URL calls swift
我是Swift編程的新手,到目前為止,我將Json數據下載為Strings並填充UITableView
。 里面的圖像是URL鏈接。 問題在於數據很多,有53個,因此也有53個url調用來獲取圖像。 剛開始,我在主線程中做的所有事情都非常滯后。 現在,我將執行http調用的代碼放在了異步方法中。 該應用程序不會滯后,但
1)圖像沒有按順序下載(盡管這樣會更好,我不介意那么多)
2)下載速度很慢,內存達到250-270mb,cpu達到40-50%,而網絡速度為500kb / s。
我沒有iPhone來進行真正的檢查,但是通過這些數字,我發現該應用程序使用了大量資源。 我不知道為什么網絡這么慢。 我認為使用3g-4g必須更快並且減輕壓力,而且我不知道模擬器在使用什么。
所以我的問題是,我的應用程序是否可以更快地運行或使用更少的資源?
在將數據放在TableView的代碼下面。 只需不到2秒的時間即可將字符串填滿表格,並花費大量時間下載所有圖像。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cellIdentifier = "GameTableViewCell"
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! GameTableViewCell
let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
cell.nameLabel?.text = games[indexPath.row].name
cell.releaseDateLabel?.text = games[indexPath.row].releaseDate
dispatch_async(backgroundQueue, {
for _ in self.games{
if let url = NSURL(string: self.games[indexPath.row].gameImage!) {
if let data = NSData(contentsOfURL: url){
cell.photoImageView?.contentMode = UIViewContentMode.ScaleAspectFit
cell.photoImageView?.image = UIImage(data: data)
}
}
}
})
return cell
}
每次要顯示單元格時,您都在下載圖像。 您需要使用NSCache
或任何其他第三方解決方案或諸如NSMutableDictionary
這樣的簡單內容來緩存成功下載的圖像,因此您不必每次都下載它們。
您還可以使用現有的第三方解決方案,例如AlamofireImage和SDWebImage ,它們提供圖像的異步下載,顯示占位符圖像和緩存。
我對此表示懷疑,因為我從未使用過外部庫,而是刪除了5至10行代碼以僅在下面的代碼中鍵入代碼。.這樣可以節省很多時間和麻煩。
if let url = NSURL(string: self.games[indexPath.row].gameImage!) {
cell.photoImageView?.hnk_setImageFromURL(url)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.