加载图片时会使用到的两个方法+ (nullable UIImage *)imageNamed:(NSString *)name;
和+ (nullable UIImage *)imageWithContentsOfFile:(NSString *)path;
这两个方法该选择哪个呢.下面看一下.
做如下的测试:
1).加载第二个控制器 先加载第一张图片
加载一张图片
加载图片前内存
使用imageWithContentsOfFile加载图片
使用imageNamed加载图片
看起来出不多.但是当返回到第一个控制器时.imageWithContentsOfFile加载的图片内存释放了.而imageNamed没有释放
2). 加载第二个控制器 加载三张相同的图片
同时显示3张相同
使用imageNamed加载3张相同图片
使用imageWithContentsOfFile加载3张相同图片
这时候就可以看出来,两者的占用内存差距来了.
总结:
使用+ (nullable UIImage *)imageNamed:(NSString *)name;
方法加载图片时, 当 UIImageView 销毁时, image 并没有跟着销毁,而是在内存中.当下一次加载同一张图片时,直接从内存中加载,当 多个 view同时加载一张 image 时,image 指向同一块内存区域.使用小图,或者使用频率较高的图片时,建议使用此方法.节约内存.
使用+ (nullable UIImage *)imageWithContentsOfFile:(NSString *)path;
加载图片时,当销毁UIImageView时, image 紧跟着被销毁,当再次使用时,再次进行加载.当多个 view同时使用一张 image 时, 内存也会跟着增加,指向的不是同一块内存区域.在使用大图,或者使用频率较低的图片时,建议使用此方法