gpt4 book ai didi

ios - [iOS]使用 CFDataRef 创建图像源时,Image I/O 是否缓存解码后的图像?

转载 作者:行者123 更新时间:2023-12-01 16:37:05 25 4
gpt4 key购买 nike

我知道我可以用 [UIImage imageNamed:] 创建 UIImages或其他UIImage方法。我使用 Image I/O 在我的应用程序中创建 gif 动画。并调整图像大小,因为它 super 快!

在 WWDC 2012 session 中:iOS App Performance: Graphics and Animations ,Apple 工程师建议我不应该自己缓存图像,因为图像缓存是由系统处理的。来自 Apple 的 Image I/O Programming Guide ,Image I/O 提供的功能之一是

Effective caching



所以我决定让 Image I/O 为我缓存所有图像。有一个名为 kCGImageSourceShouldCache 的键在 Image Source Option Dictionary Keys其中描述说

Whether the image should be cached in a decoded form.



我相信如果我创建一个带有 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);

最佳答案

经过对 Instruments 的一些实验,我终于明白了这一点。也就是说,如果开启缓存选项,图像解码只发生一次,并且在第一次需要绘制图像时发生。只要我保留图像的引用,图像的解码版本就会被缓存。图片来源不相关。

关于ios - [iOS]使用 CFDataRef 创建图像源时,Image I/O 是否缓存解码后的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27255014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com