Автоматическое количество сохранений, AVFoundation: словарь, содержащий объекты, не являющиеся объектами objective C. Как это сделать с помощью ARC?

#avfoundation #automatic-ref-counting

#avfoundation #автоматический подсчет ссылок

Вопрос:

На самом деле я конвертирую некоторые из моих исходных файлов в ARC. ARC очень хорош, экономит время и утечки памяти. На самом деле я пытаюсь преобразовать свой код AVFoundation и достиг своих пределов в одной особой строке кода:

 image = [CIImage imageWithCVPixelBuffer:pixelBuffer options:[NSDictionary dictionaryWithObject:colorSpace forKey:kCIImageColorSpace]];
  

«Цветовое пространство» — это тип CGColorSpaceRef , он же CGColorSpace * . CGColorSpace является структурой и не может быть преобразован в id . Я очень удивлен этим, потому что код всегда работал для меня (цветовое пространство используется CIImage правильно). Я не могу запустить компилятор с использованием ARC, потому что цветовое пространство не является объектом objective C. Компилятор (использующий ARC) отказывается добавлять цветовое пространство в словарь.

Кто-нибудь знает, как заменить «цветовое пространство» внутри этого словаря или как сообщить компилятору, что можно использовать этот указатель цветового пространства?

Ответ №1:

Используйте CFDictionaryRef using CFDictionaryCreate() вместо an NSDictionary , а затем преобразуйте его в NSDictionary using (__bridge_transfer NSDictionary *)

Комментарии:

1. Ключевое слово «__bridge» устранило проблему. После того, как я повозился с этим, код на самом деле выглядит так: image = [CIImage imageWithCVPixelBuffer:Параметры пиксельного буфера: [NSDictionary dictionaryWithObject:(__bridge id) colorSpace forKey:kCIImageColorSpace]]; Большое спасибо 🙂