2014-08-27 4 views
0

Существует конфликт между документами и файлом заголовка относительно значения по умолчанию kCGImageSourceShouldCache. Они говорят точную противоположность. Очевидно, что обходной путь заключается в том, чтобы установить значение явно, но было бы полезно узнать истинное поведение по умолчанию для работы с устаревшим кодом.Каково значение kCGImageSourceShouldCache по умолчанию?

документы говорят:

kCGImageSourceShouldCache

ли изображение должно быть кэшируются в декодированной форме. Значение этого ключа должно быть значением CFBoolean. Значение по умолчанию - kCFBooleanTrue в 32-битном, kCFBooleanFalse в 64-битном. Этот ключ может быть предоставлен в словаре параметров, который вы можете передать функциям CGImageSourceCopyPropertiesAtIndex и CGImageSourceCreateImageAtIndex.

Доступно в 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); 
+0

Теперь [документ говорит] (https://developer.apple.com/documentation/imageio/kcgimagesourceshouldcache?language=objc) «Значение по умолчанию - kCFBooleanFalse в 32-битном, kCFBooleanTrue в 64-разрядном режиме». – Pang

ответ

0

Просто, чтобы добавить к путанице, я провел тест на прошивке и проверил использование памяти следующего этого кода с очень большим изображением

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

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

Результаты показали, что значение kCGImageSourceShouldCache по умолчанию равно NO на обоих 32 и 64 бит (использование памяти было намного выше после этого кода, когда я вручную установил значение YES).

Смежные вопросы