UIImageView的细节

加载图片时会使用到的两个方法+ (nullable UIImage *)imageNamed:(NSString *)name;+ (nullable UIImage *)imageWithContentsOfFile:(NSString *)path;
这两个方法该选择哪个呢.下面看一下.

UIImageView的细节_第1张图片

做如下的测试:
1).加载第二个控制器 先加载第一张图片

UIImageView的细节_第2张图片
加载一张图片
加载图片前内存

使用imageWithContentsOfFile加载图片

使用imageNamed加载图片

看起来出不多.但是当返回到第一个控制器时.imageWithContentsOfFile加载的图片内存释放了.而imageNamed没有释放

2). 加载第二个控制器 加载三张相同的图片

UIImageView的细节_第3张图片
同时显示3张相同
使用imageNamed加载3张相同图片

使用imageWithContentsOfFile加载3张相同图片

这时候就可以看出来,两者的占用内存差距来了.

总结:
使用+ (nullable UIImage *)imageNamed:(NSString *)name;方法加载图片时, 当 UIImageView 销毁时, image 并没有跟着销毁,而是在内存中.当下一次加载同一张图片时,直接从内存中加载,当 多个 view同时加载一张 image 时,image 指向同一块内存区域.使用小图,或者使用频率较高的图片时,建议使用此方法.节约内存.

使用+ (nullable UIImage *)imageWithContentsOfFile:(NSString *)path;加载图片时,当销毁UIImageView时, image 紧跟着被销毁,当再次使用时,再次进行加载.当多个 view同时使用一张 image 时, 内存也会跟着增加,指向的不是同一块内存区域.在使用大图,或者使用频率较低的图片时,建议使用此方法

你可能感兴趣的:(UIImageView的细节)