我知道我可以使用[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
,其描述为
图像是否应以解码形式缓存。
我相信如果我使用网址创建图像源,则稍后创建的图像会被缓存。但是如果图像源是用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);
答案 0 :(得分:0)
经过一些仪器实验后,我终于弄明白了。也就是说,如果启用了缓存选项,则图像解码仅发生一次,并且在第一次需要绘制图像时发生。只要我保留图像的参考,就会缓存图像的解码版本。图像来源无关。