kCGImageSourceShouldCache 的默认值是多少?

Posted

技术标签:

【中文标题】kCGImageSourceShouldCache 的默认值是多少?【英文标题】:What is the default value of kCGImageSourceShouldCache? 【发布时间】:2014-10-20 21:00:07 【问题描述】:

关于 kCGImageSourceShouldCache 的默认值,文档和头文件之间存在冲突。他们说的恰恰相反。显然,解决方法是显式设置值,但了解处理遗留代码的真正默认行为会很有用。

文档说:

kCGImageSourceShouldCache

图像是否应该以解码的形式缓存。此键的值必须是 CFBolean 值。默认值为 32 位的 kCFBooleanTrue,64 位的 kCFBooleanFalse。该键可以在选项字典中提供,您可以将其传递给函数 CGImageSourceCopyPropertiesAtIndex 和 CGI​​mageSourceCreateImageAtIndex。

适用于 ios 4.0 及更高版本。

在 CGImageSource.h 中声明。

头文件说:

/* Specifies whether the image should be cached in a decoded form. The
 * value of this key must be a CFBooleanRef.
 * kCFBooleanFalse indicates no caching, kCFBooleanTrue indicates caching.
 * For 64-bit architectures, the default is kCFBooleanTrue, for 32-bit the default is   kCFBooleanFalse.
 */

IMAGEIO_EXTERN const CFStringRef kCGImageSourceShouldCache      
IMAGEIO_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);

【问题讨论】:

现在 the doc says "默认值是 32 位的 kCFBooleanFalse,64 位的 kCFBooleanTrue"。 【参考方案1】:

为了增加混乱,我在 iOS 上进行了测试,并检查了这段代码后的内存使用情况,并带有一个非常大的图像

    NSDictionary *options = [NSDictionary dictionaryWithObjects:@[@(4096),  @(YES), @(YES)] forKeys:
                         @[(id)kCGImageSourceThumbnailMaxPixelSize,
                           (id)kCGImageSourceCreateThumbnailWithTransform,
                           (id)kCGImageSourceCreateThumbnailFromImageIfAbsent]];

    CGImageRef thumbnail = CGImageSourceCreateThumbnailAtIndex(myImageSource, 0,(__bridge CFDictionaryRef) options);

结果显示 kCGImageSourceShouldCache 的默认值在 32 位和 64 位上都是 NO(当我手动将值设置为 YES 时,遵循此代码的内存使用率要高得多)。

【讨论】:

以上是关于kCGImageSourceShouldCache 的默认值是多少?的主要内容,如果未能解决你的问题,请参考以下文章