iOS_UIImage中 + imageNamed: 和 + imageWithContentsOfFile:两个方法的区别

来源:互联网 发布:mac airplay显示器关闭 编辑:程序博客网 时间:2024/06/10 02:18

说明:
UIImage中 + imageNamed: 和 + imageWithContentsOfFile: 都是我们常用的创建image对象方法, 但是它们之间还是有一些区别,特别是考虑线程安全, 系统内存优化方面

文章中尽量不使用或少使用封装, 目的是让大家清楚为了实现功能所需要的官方核心API是哪些(如果使用封装, 会在封装外面加以注释)

  • 此文章由 @Scott 编写. 经 @春雨,@黑子 审核. 若转载此文章,请注明出处和作者

+ imageNamed: 和 + imageWithContentsOfFile:两个方法的区别

核心API

Class : UIImage
Delegate : null
涉及的API:(API的官方详细注释(英文)详见本章结尾)

+ (UIImage *)imageNamed:(NSString *)name+ (UIImage *)imageWithContentsOfFile:(NSString *)path

讨论:

+ imageNamed:
使用此方法创建image对象首先从系统缓存中查找, 如果缓存中没有, 再从磁盘或者资源目录中加载图片数据,生成image对象返回.同时, Apple官方提示此方法不确保线程的安全.
另外,使用此方法, 在iOS 4以后, 如果文件是PNG格式, 在参数部分指定文件名的时候,后面可以省略.PNG后缀.
另外Apple官方提示如果你只想显示图片,而不想添加进系统的缓存中时, 使用imageWithContentsOfFile:方法.

+ imageWithContentsOfFile:
相对imageNamed:方法, 此方法不会缓存图片对象. 在一定情况下, 会提高APP的内存使用效率.

Apple官方注释:

This method looks in the system caches for an image object with the specified name and returns that object if it exists. If a matching image object is not already in the cache, this method locates and loads the image data from disk or asset catelog, and then returns the resulting object. You can not assume that this method is thread safe.

On iOS 4 and later, if the file is in PNG format, it is not necessary to specify the .PNG filename extension. Prior to iOS 4, you must specify the filename extension.

If you have an image file that will only be displayed once and wish to ensure that it does not get added to the system’s cache, you should instead create your image using imageWithContentsOfFile:. This will keep your single-use image out of the system image cache, potentially improving the memory use characteristics of your app.

    • imageNamed 和 imageWithContentsOfFile两个方法的区别
      • 核心API
    • 讨论
    • API 官方注释英文


API 官方注释(英文)

/** * @brief   Returns the image object associated with the specified filename. * * @param   <name>  The name of the file. If this is the first time the image is being loaded, the method looks for an image with the specified name in the application’s main bundle.  * * @return  The image object for the specified file, or nil if the method could not find the specified image. */+ (UIImage *)imageNamed:(NSString *)name
/** * @brief   Creates and returns an image object by loading the image data from the file at the specified path. * * @param <path>    The full or partial path to the file * * @return A new image object for the specified file, or nil if the method could not initialize the image from the specified file. */+ (UIImage *)imageWithContentsOfFile:(NSString *)path
0 0
原创粉丝点击