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
怎么样成为程序员,学习和实践,日积月累...