【问题标题】:Memory management when adding a resized UIImage to a UITableViewCell将调整大小的 UIImage 添加到 UITableViewCell 时的内存管理
【发布时间】:2011-08-17 14:19:39
【问题描述】:

我缓存了图像,我想调整它们的大小并在表格视图中显示它们。代码如下:

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://huntify.com%@",[[hunts objectAtIndex:indexPath.row] iconURL]]];
UIImage *logo = [[UIImage alloc] initWithContentsOfFile:[[ASIDownloadCache sharedCache] pathToCachedResponseDataForURL:url]];
logo = [logo imageScaledToSize:CGSizeMake(100.0, 100.0)];    
[[cell imageView] setImage:logo];

这很好,但我想知道我应该如何释放 UIImage。我怀疑在将图像属性设置为 UIImageView 后释放“徽标”是错误的,因为 imageScaledToSize 方法。我应该在调整大小并释放旧 UIImage 时分配一个新的 UIImage 吗?

【问题讨论】:

    标签: iphone objective-c memory-management uitableview uiimage


    【解决方案1】:

    这里有很大的内存泄漏。通过在logo = [logo imageScaledToSize:CGSizeMake(100.0, 100.0)]; 中为logo 分配另一个值,您将失去对您需要释放的原始图像的引用。所以是的,你应该使用一个新的变量来存储imageScaledToSize:的结果,然后释放原来的logo

    【讨论】:

    • 好的,正如我当时怀疑的那样......非常感谢!!
    【解决方案2】:

    这样做-

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://huntify.com%@",[[hunts objectAtIndex:indexPath.row] iconURL]]];
    UIImage *logo = [[UIImage alloc] initWithContentsOfFile:[[ASIDownloadCache sharedCache] pathToCachedResponseDataForURL:url]];
    UIImage *resizedLogo = [logo imageScaledToSize:CGSizeMake(100.0, 100.0)];    
    [[cell imageView] setImage:resizedLogo];
    [logo release];
    

    【讨论】:

    • 我从不分配 resizedLogo - 我真的应该释放它吗?
    • 抱歉,我在看到帖子后就对其进行了忍者编辑-您是对的,以上是正确的。
    【解决方案3】:

    请记住,当您[logo release] 时,您只是在释放对象的所有权,而不是在释放它。

    【讨论】:

      猜你喜欢
      • 2018-02-14
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      • 2014-02-15
      • 2015-11-20
      • 1970-01-01
      相关资源
      最近更新 更多