【问题标题】:objective-c memory friendly way for background image背景图像的objective-c内存友好方式
【发布时间】:2012-05-14 13:24:41
【问题描述】:

我有一个 ipad 应用程序(>30 个视图/页面)每个视图都有一个独特的背景。

问题: 设置背景的最佳方法是什么(内存友好)

有没有比添加:uiimageview "backgroundView" 作为子视图更好的方法?

版本1:

[[UIImage alloc] initWithData:imageData];

视网膜开关似乎有问题

版本2:

self.layer.contents = (id)image.CGImage;

版本 3:

UIImage* image = [UIImage imageWithContentsOfFile:fileLocation];

版本 2 似乎工作正常。也许有人告诉我什么是最好的方法,以及为什么;)

谢谢 亚历克斯

【问题讨论】:

    标签: objective-c memory-leaks background-image memory-warning


    【解决方案1】:

    CGImage 与视网膜有问题 ... version3。最适合记忆!

    【讨论】:

      【解决方案2】:

      在版本 2 中,如果您不使用 ARC,您必须手动释放该新图像对象。版本 3 使用自动释放的对象。

      两个版本在内存友好性方面是相同的。 我更喜欢版本 3,因为您不必自己做任何事情来释放内存。

      您也可以使用 [UIImage imageNamed:@"image-name.png"],它还会生成一个自动释放的对象。

      如果您希望它尽可能对内存友好,则应考虑使用 PVR 图像,因为这些图像是由图形硬件本机支持的。

      最好的,

      弗洛

      【讨论】:

      • 嗨,感谢您的快速回复。但是 imagenamend 会吃掉很多内存;/所以我还需要 [self addSbview:UIIMAGEVIEW] 之类的东西吗?因为我在第 2 版中不需要这个?
      • 为什么 imageNamed 太耗内存了?我想不出为什么这个构造函数会创建比另一个更大的内存块。也许我没有正确回答您的问题,但无论哪种方式,您都必须加载图像并将其分配给图像视图或 CoreAnimation 层。我不认为使用 UIImageView 会产生那么多开销。
      • 因为图片被应用缓存了。只需谷歌“imagenamed - 内存泄漏” - 实际上它确实在更大的应用程序上产生了那么多开销。
      猜你喜欢
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      相关资源
      最近更新 更多