UIImage总结

  • UIImage在iOS中是比较高级的一个类,底层一点的有CIImage和CGImage。
  • UIImage的三个属性:size、imageOrientation、scale
    一张图片的实际尺寸应该是size * scale,这里就跟是否是retina屏幕有关了。retina屏幕的scale为2,当加载图片的时候加载的是1x图。然我们再深入一点儿为什么不直接加载到成二倍的尺寸呢,原因很简单因为我们在界面布局中逻辑坐标系中的 (单位是point),而实际的绘制都是在设备坐标系(单位是pixel)进行的,系统会自动帮我们完成从point到pixel之间的转化。

imageOrientation的八种枚举:

typedef NS_ENUM(NSInteger, UIImageOrientation) { 
    UIImageOrientationUp,            // 原始方向(向上)
    UIImageOrientationDown,          // 旋转180°        
    UIImageOrientationLeft,          // 逆时针旋转90°       
    UIImageOrientationRight,         // 顺时针旋转90°
    UIImageOrientationUpMirrored,    // 原始方向水平翻转   
    UIImageOrientationDownMirrored,  // Down方向水平翻转
    UIImageOrientationLeftMirrored,  // Left方向垂直翻转  
    UIImageOrientationRightMirrored, // Right方向垂直翻转
}; 

在iOS开发中,我们可以使用imageWithCGImage:scale:orientation:方法来设置图片的方向。

  • imageNamed:是UIImage的一个类方法,它做的事情比我们看到的要稍微多一些。它的加载流程如下:
    a. 系统会去检查系统缓存中是否存在该名字的图像,如果存在则直接返回。
    b. 如果系统缓存中不存在该名字的图像,则会先加载到缓存中,在返回该对象。
    观察上面的操作我们发现系统会缓存我们使用imageNamed:方法加载的图像时候,系统会自动帮我们缓存。这种机制适合于那种频繁用到界面贴图类的加载,但如果我们需要短时间内频繁的加载一些一次性的图像的话,最好不要使用这种方法。

  • imageWithContentsOfFile,imageWithData这两个方法跟前一个方法一样都是完成从文件加载图像的功能。但是不会经过系统缓存,直接从文件系统中加载并返回。

顺便提一下,当收到内存警告的时候,系统可能会将UIImage内部的存储图像的内存释放,下一次需要绘制的时候会重新去加载。

你可能感兴趣的:(UIImage总结)