【问题标题】:iOS Haneke - memory warning then crashiOS Haneke - 内存警告然后崩溃
【发布时间】:2015-08-16 22:10:00
【问题描述】:

我正在开发一个使用 Haneke library 从 Twitter 获取图像的应用程序。获得图像后,我使用 UITableView 显示它们。我一次取10张照片。我的应用程序加载但由于内存泄漏而迅速崩溃。

我用来设置图像的代码如下。

var tweetImage = "http://pbs.twimg.com/media/CGe89eqWQAACBxR.jpg"

if let var urlString = tweetImage {
  var url = NSURL(string: urlString)
  cell.tweetImage?.sizeToFit()
  cell.tweetImage?.hnk_setImageFromURL(url!)
}

当我注释掉最后一行 cell.tweetImage?.hnk_setImageURL(url!) 时,我不再收到内存警告并且它不会崩溃。

这是我开发或制作的第一个应用程序,解决此内存问题的最佳方法是什么?还是我可能错误地使用了 Haneke 库?

提前致谢,如果有帮助,以上是 Instruments 的输出。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell= tableView.dequeueReusableCellWithIdentifier("tweetCell", forIndexPath: indexPath) as! TweetTableViewCell

    if (indexPath.row % 2 == 0){
        cell.backgroundColor = UIColor.whiteColor()
    }else{
        cell.backgroundColor = UIColor(red: 0.973, green: 0.973, blue: 0.973, alpha: 1)
    }

    var row = self.results[indexPath.row]

    var text = row["text"].string
    var name = row["name"].string
    var image = row["image"].string
    var avatar = row["avatar"].string
    var votes = row["rank"].int
    var long = row["long"].string
    var lat = row["lat"].string
    var id = row["id"].int

    var tweetImage = image == nil ? avatar : image

    if let urlString = tweetImage {
        var url = NSURL(string: urlString)
        cell.tweetImage?.sizeToFit()
        cell.tweetImage?.hnk_setImageFromURL(url!)
    }

    return cell
}

上面是我的 cellForRowAtIndexPath 方法,到目前为止,我只是在处理图像。 self.results 是从带有 AlamoFire Library 的 api 加载的

【问题讨论】:

  • 你确定你没有一些超大的图片吗?他们可能会导致内存警告?您是否尝试过将此代码放入自动释放池中?
  • 你能发布所有cellForRowAtIndexPath方法吗?另外,您是否尝试过加载所有小图像?
  • @KDaker 刚刚添加了我的cellForRowAtIndexPath 方法,我还没有尝试加载所有小图像。
  • 您是如何在自定义单元格中创建tweetImage 的?它可能是造成泄漏的图像视图
  • 我最终删除了cell.tweetImage?.sizeToFit() 并修复了内存泄漏。

标签: ios uitableview swift memory-leaks haneke


【解决方案1】:

我从原始代码中删除了cell.tweetImage?.sizeToFit(),现在它可以工作了。不知道为什么我一开始就有那个代码,但删除它解决了内存泄漏问题。如果有人知道为什么在这种情况下滥用cell.tweetImage?.sizeToFit() 会导致内存泄漏,我很想知道。

正确代码:

var tweetImage = "http://pbs.twimg.com/media/CGe89eqWQAACBxR.jpg"

if let var urlString = tweetImage {
 var url = NSURL(string: urlString)
 cell.tweetImage?.hnk_setImageFromURL(url!)
}

【讨论】:

    猜你喜欢
    • 2015-08-08
    • 2011-10-15
    • 2012-06-12
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多