iOS-UIImage初始化一张图片的方法及优缺点

2018-09-21  本文已影响47人  Simple_Code

方法一:使用类方法imageNamed:创建

UIImage *image = [UIImage imageNamed:@"ganggang"];  

这个方法创建的图片是从缓存里面获取的,先在缓存里查看,看是不是有这个图片,没有的话先把图片添加到缓存再使用。有的话直接使用缓存里面的。

优点:一旦加入到缓存中就在内存中,不用再次加载。
缺点:一旦加入到缓存中就一直占用内存,不能被释放掉。

使用情况:如果这个图片要在多个地方使用的话,建议使用这个方法。

方法二:使用类方法imageWithContentsOfFile:创建

NSString *imagePath = [NSString stringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"];
[UIImage imageWithContentsOfFile:imagePath];

使用imageWithContentsOfFile:创建UIImage的时候,是直接从磁盘上加载。当收到内存警告时,UIImage对象会被释放,下一次绘图的时候,需要重新加载。

优点:当收到内存警告时,UIImage对象会被释放。
缺点:下一次绘图的时候,需要重新加载。

使用情况:建议使用频率比较低的图片采用该种方法

方法三:使用类方法imageWithData:创建(一般使用比较少)

// 下面的这种方式会出现卡线程的情况,所以建议在子线程中操作
// imageWithData: data
NSURL *url = [NSURL URLWithString:@"http://e.109d0f5555c5cec3fdfc032302.jpg?referer=f55e30e2d71373f0ac285aaf8d00&x=.jpg"];
UIImage *image2 = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];

需要注意的是,如果imageWithData:是同步网络请求,如果在主线程直接使用的话,会卡主线程,因此一般不会在主线程中直接使用,而是采用异步网络请求获得data的值。

上一篇下一篇

猜你喜欢

热点阅读