【问题标题】:populate UITableView with Json image URL calls swift使用 Json 图像 URL 调用 swift 填充 UITableView
【发布时间】:2015-10-28 16:33:59
【问题描述】:

我是 Swift 编程新手,到目前为止,我正在将 Json 数据下载为字符串并填充 UITableView。里面的图片是网址链接。问题是数据很多,有 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
}

【问题讨论】:

    标签: ios json image uitableview


    【解决方案1】:

    每次要显示单元格时,您都在下载图像。您需要使用NSCache 或任何其他第三方解决方案或像NSMutableDictionary 这样简单的东西来缓存下载成功的图像,这样您就不会每次都下载它们。

    您还可以使用现有的第三方解决方案,如AlamofireImageSDWebImage,它们提供图像的异步下载、显示占位符图像和缓存

    【讨论】:

    • 我会尝试我的方式,如果我不能,我会添加第三方库,感谢您的信息。
    【解决方案2】:

    我对此持怀疑态度,因为我从未使用过外部库,而是删除了 5-10 行代码来输入下面的代码。嗯,这样可以节省很多时间和麻烦。

     if let url = NSURL(string: self.games[indexPath.row].gameImage!) {
            cell.photoImageView?.hnk_setImageFromURL(url)
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多