【问题标题】:Would such assignment of image cause a memory leak?这样的图像分配会导致内存泄漏吗?
【发布时间】:2009-04-01 16:33:22
【问题描述】:
- (void)viewDidLoad {
    [super viewDidLoad];
    landscape.image = [UIImage imageNamed:@"tenerife1.png"];
}

我将一个新的UIImage 分配给UIImageView 对象的图像属性。我不确定这是否会导致内存泄漏?

【问题讨论】:

    标签: iphone memory memory-management memory-leaks


    【解决方案1】:

    不,不应该。设置新的时候应该自动释放旧图像,而“imageNamed”方法使用autorelease,所以你应该可以。

    【讨论】:

      【解决方案2】:

      嘿,考虑到 imageNamed 存在严重的内存问题,因为您失去了对其缓存的控制 - 即:一旦您完成了图像,您就无法回收该内存。一个快速的谷歌搜索会让你知道有多少人遇到了 imageNamed 的问题

      我参加了苹果 iphone 技术讲座,演讲的人也证实了同样的事情 - 他建议使用 imageWithContentsOfFile 而不是 imageNamed

      如果您只有几个小图像,则可以使用 imageWithContentsOfFile,即使它有点慢 - 并实现您自己的缓存逻辑 - 请查看这个很棒的链接以了解如何做到这一点here

      【讨论】:

        【解决方案3】:

        这取决于image 属性的定义方式。如果它被定义为retain,或者,我想,甚至是copy,应该没问题。如果将其定义为 assign,您最终会尝试引用已释放的内存并导致程序崩溃。

        【讨论】:

          【解决方案4】:

          通常不会,但这取决于您如何定义landscape.image。见上面的帖子。小心使用其中的很多:

          [UIImage imageNamed:@"tenerife1.png"];
          

          因为这些图像往往会填满内存,而不会被释放。

          【讨论】:

          • 我应该用什么来代替那个?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多