SDWebImage源码阅读(十二)NSImage+WebCache

  看标题的 NSImage 应该知道这是针对 macOS 平台开发时使用的一个 NSImage 的一个分类。

  由于目前只是做 iOS 开发,对 macOS 开发几乎完全不了解,所以这篇只是针对 SDWebImage 中的各个文件的一篇例行文章。

  .h 

 1 #import "SDWebImageCompat.h"
 2 
 3 #if SD_MAC
 4 
 5 #import <Cocoa/Cocoa.h>
 6 
 7 @interface NSImage (WebCache)
 8 
 9 - (CGImageRef)CGImage;
10 - (NSArray<NSImage *> *)images;
11 - (BOOL)isGIF;
12 
13 @end
14 
15 #endif

  首先条件预编译判断是否是 MAC 平台开发。

  如果是,则引入 cocoa 框架。

  NSImage 的 WebCache 定义了三个方法。

  1.获取 NSImage 对象的 CGImageRef 对象。CGImageRef 和 NSImage 可以相互转化。

  2.获取 NSImage 对象的 images。貌似 NSImage 不支持动图,在实现里直接返回了 nil。

  3.判断 NSImage 对象是否是 GIF 格式图片。由于上面的一个方法获取 images 直接返回了 nil,这里的判断也是直接返回了 NO。

  .m

 1 #import "NSImage+WebCache.h"
 2 
 3 #if SD_MAC
 4 
 5 @implementation NSImage (WebCache)
 6 
 7 - (CGImageRef)CGImage {
 8     NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height);
 9     CGImageRef cgImage = [self CGImageForProposedRect:&imageRect context:NULL hints:nil];
10     return cgImage;
11 }
12 
13 - (NSArray<NSImage *> *)images {
14     return nil;
15 }
16 
17 - (BOOL)isGIF {
18     return NO;
19 }
20 
21 @end
22 
23 #endif

  这里值得看的就是 NSImage 和 CGImageRef 的转化。

  首先获取 NSImage 对象的 NSRect,然后调用了 CGImageForProposedRect: context: hints: 方法。后面两个参数直接使用了 NULL  和 nil。

 

  END

posted @ 2017-06-10 12:19  鳄鱼不怕牙医不怕  阅读(402)  评论(0编辑  收藏  举报