使用Json图像URL调用swift

时间:2015-10-28 16:34:00

标签: ios json image uitableview

我是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
}

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我持怀疑态度,因为我从未使用过外部库,而是删除了5到10行代码,只需键入下面的代码即可。这样可以节省大量时间和麻烦。

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