【发布时间】:2015-01-31 00:42:59
【问题描述】:
我知道我可以使用 [UIImage imageNamed:] 或其他 UIImage 方法创建 UIImages。我使用 Image I/O 在我的应用程序中创建 gif 动画。并调整图像大小,因为它超级快!
在 WWDC 2012 会议:iOS App Performance: Graphics and Animations 中,Apple 工程师建议我不应该自己缓存图像,因为图像缓存是由系统处理的。从 Apple 的 Image I/O Programming Guide 来看,Image I/O 提供的功能之一是
有效的缓存
所以我决定让 Image I/O 为我缓存所有图像。在里面有一个名为kCGImageSourceShouldCache的键
Image Source Option Dictionary Keys 其中描述说
图像是否应该以解码的形式缓存。
我相信如果我创建一个带有 url 的图像源,那么稍后创建的图像就会被缓存。但是如果图像源是用CFDataRef 对象创建的呢?它只是一个指向一些图像数据的指针,它不像一个可以识别唯一资源的 url。在这种情况下,Image I/O 是否仍然缓存图像?谢谢。
这是我用来创建图像的代码:
CFDictionaryRef myOptions = NULL;
CFStringRef myKeys[2];
CFTypeRef myValues[2];
myKeys[0] = kCGImageSourceShouldCache;
myValues[0] = (CFTypeRef)kCFBooleanTrue;
myKeys[1] = kCGImageSourceShouldAllowFloat;
myValues[1] = (CFTypeRef)kCFBooleanTrue;
myOptions = CFDictionaryCreate(NULL, (const void **) myKeys,
(const void **) myValues, 2,
&kCFTypeDictionaryKeyCallBacks,
& kCFTypeDictionaryValueCallBacks);
CGImageSourceRef imageSource = CGImageSourceCreateWithData(imageData, myOptions);
CFRelease(myOptions);
CGImageRef myImage = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL);
CFRelease(imageSource);
【问题讨论】:
标签: ios objective-c image caching