IOS开发_加载图片imageNamed和imageWithCo
2016-03-01 本文已影响2170人
相关函数
在iOS开发中生成一个UIImage对象的方法通常有两种
1.利用imageNamed方法
2.使用imageWithContentsOfFile
下面介绍这两中方法的区别:
imgeNamed
[UIImage imageNamed:@"hearderImage"]
使用这个方法生成的UIImage对象,会在应用的bundle中寻找图片,如果找到则Cache到系统缓存中,作为内存的cache.
而程序员是无法操作cache的,只能由系统自动处理,如果我们需要重复加载一张图片,那这无疑是一种很好的方式,因为系统能很快的从内存的cache找到这张图片.
但是试想,如果加载很多很大的图片的时候,内存消耗过大的时候,就会会强制释放内存,即会遇到内存警告(memory warnings).由于在iOS系统中释放图片的内存比较麻烦,所以冲易产生内存泄露
小结
imageNamed只适合用于小的图片的读取,或重复使用一张图片的时候,而当加载一些比较大的图片文件的时候我们应当尽量避免使用这个方法.
imageWithContentsOfFile
NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
UIImage *image = [UIImage imageWithContentsOfFile:filePath];
相比上面的imageNamed这个方法要写的代码多了几行,使用imageWithContentsOfFile的方式加载的图片,图片会被系统以数据的方式进行加载.返回的对象不会保存在缓存中,一旦对象销毁就会释放内存,所以一般不会因为加载图片的方法遇到内存问题.
小结
当有些图片在应用中只使用比较少的次数的,就可以用这样的方式,相比imageNamed会降低内存消耗,避免一些内存问题.
Last
总的来说,写出更好的代码,我们需要权衡代码中所遇到的情况,根据情况选择更好的方法.