【问题标题】:Caching behavior of UIImageUIImage 的缓存行为
【发布时间】:2012-01-02 10:44:19
【问题描述】:

UIImage 是否曾经从其缓存中删除图像?我可以保留一个指向我从imageNamed: 获得的图像的指针,并且只要我喜欢就可以使用它,或者我必须始终调用imageNamed:?

【问题讨论】:

    标签: iphone caching uiimage


    【解决方案1】:

    就内存管理而言,从imageNamed: 返回的UIImage 对象与所​​有其他对象一样被处理。如果你想在方法调用之间保持对对象的引用,你应该在完成后retain它和release它来减少引用计数。

    UIImage * cachedImage;
    
    -(void) getTheImage {
      UIImage * cachedImage = [[UImage imageNamed:@"MyImage.png"] retain];
      //Do something with the image...
    }
    //In some other method or dealloc
    [cachedImage release];
    

    另外,请注意UIImage class reference 说:

    在内存不足的情况下,图像数据 可以从 UIImage 对象中清除到 释放系统上的内存。 这个 清除行为仅影响 图像数据由内部存储 UIImage 对象而不是对象 当您尝试绘制一个 数据已被清除的图像, 图像对象自动重新加载 原始文件中的数据。这个 然而,额外的负载步骤可能会产生 小的性能损失。

    【讨论】:

      【解决方案2】:

      UIImage 缓存数据本身。你不能拿着一个指针,只是传递它。这可能是不安全的,因为当有内存警告并且没有对该对象的强引用时,UIImage 将清除缓存的数据。每次调用 [UIImage imageNamed:]。它速度很快,并将参考从内存中返回到图像。如果图像不再在内存中,它将重新加载并传递该引用

      【讨论】:

        猜你喜欢
        • 2015-11-13
        • 1970-01-01
        • 1970-01-01
        • 2012-01-28
        • 1970-01-01
        • 1970-01-01
        • 2013-11-24
        • 2017-09-03
        相关资源
        最近更新 更多