簡體   English   中英

用Json圖像URL調用swift填充UITableView

[英]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這樣的簡單內容來緩存成功下載的圖像,因此您不必每次都下載它們。

您還可以使用現有的第三方解決方案,例如AlamofireImageSDWebImage ,它們提供圖像的異步下載,顯示占位符圖像和緩存。

我對此表示懷疑,因為我從未使用過外部庫,而是刪除了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM