加载UIImage的好习惯

DCM*_*xxx 2 memory-management uiimage ios

我的应用程序中有一些图标,我在多个视图中重复使用(例如,收藏夹图标).

为了节省内存,我想知道是否使用类加载静态图像的类方法是一个好主意?

例如 :

+ (UIImage *)favoriteIcon {
    static UIImage * icon;
    if (!icon)
        icon = [UIImage imageNamed:@"favorite.png"];
    return icon;
}
Run Code Online (Sandbox Code Playgroud)

或者我应该只在+ (UIImage *) imageNamed:(NSString *)name每次需要时使用?

谢谢你的建议.

ben*_*ado 6

[UIImage imageNamed:]在引擎盖下已经做了类似的事情.实际上,它更聪明,因为它还可以在内存不足时转储图像,而不需要立即使用,而您的favoriteIcon方法可以让它们永远加载.

一般来说,最好避免在构建应用程序之前进行这样的优化,然后对其进行分析以查看需要改进的方式/位置.否则你就是在浪费时间,甚至可能让事情变得更糟.我建议你学习如何使用Instruments来分析你的应用程序,它有点复杂,但是一旦掌握了它就会很有趣.

  • 我想补充一点,使用`UIImage imageNamed:`非常适合小图像,如图标.对于大型图像使用"UIImage imageNamed:"是不好的做法,除非在应用程序的整个生命周期中显示图像.瞬态的大图像应该加载`UIImage imageWithContentsOfFile:`(或类似的). (5认同)