Apple官方的文档为生成一个UIImage对象提供了两种方法:
- imageNamed,其参数为图片的名字;
[UIImage imageNamed:ImageName];
- imageWithContentsOfFile,其参数也是图片文件的路径。
NSString *thumbnailFile = [[NSBundle mainBundle].resourcePath stringByAppendingPathComponent:fileName];
UIImage *thumbnail = [UIImage imageWithContentsOfFile:thumbnailFile];
3.用initWithContentsFile方法
UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath]
第一种方法为常见方法,这个方法用一个指定的名字在系统缓存中查找并返回一个图片对象,如果它存在的话。如果缓存中没有找到相应的图片,这个方法从指定的文档中加载然后缓存并返回这个对象。利用它可以方便加载资源图片。用imageNamed的方式加载时,会把图像数据根据它的名字缓存在系统内存中,以提高imageNamed方法获得相同图片的image对象的性能。即使生成的对象被 autoReleasePool释放了,这份缓存也不释放。而且没有明确的释放方法。如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存。
imageWithContentsOfFile:仅加载图片,图像数据不会缓存。因此对于较大的图片以及使用情况较少时,那就可以用该方法,降低内存消耗。得到的对象是autoRelease的,当autoReleasePool释放时才释放。
第三种方法要手动release掉。不系统缓存。release后立即释放,一般用在封面等图比较大的地方。