我知道我可以用[UIImage imageNamed:]
或其他UIImage
方法创建UIImages。我使用Image I/O在我的应用程序中创建gif动画。并且调整图像的大小,因为它速度超快![iOS]使用CFDataRef创建图像源时,Image I/O缓存解码图像吗?
在WWDC 2012会议:iOS App Performance: Graphics and Animations,Apple工程师建议我不应该自己缓存图像,因为图像缓存是由系统处理的。从苹果公司的Image I/O Programming Guide的特征的图像I/O提供一个
有效的缓存
所以我决定让图像I/O缓存中的所有图片我。有一个在 Image Source Option Dictionary Keys
命名为kCGImageSourceShouldCache
键其中描述说
图像是否应该被解码的形式进行缓存。
我相信如果我使用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);
是的,有些人实际上发现解码速度很慢,甚至会在后台线程中将图像渲染到离屏1x1上下文以强制解码。 – Andy 2014-12-03 02:14:54