Вы не можете просто привести NSData
объект к CFDataRef
; как отмечено в документах , CFDataRef
является «ссылкой на неизменяемый объект CFData», который не совпадает с экземпляром NSData
:
typedef const struct __CFData *CFDataRef;
Чтобы создать CFDataRef
из экземпляра NSData
, вам нужно использовать метод CFDataCreate
, передавая байты и длину:
NSData *dataRef = UIImagePNGRepresentation([UIImage imageNamed:@"contact3.png"]);
CFDataRef dr = CFDataCreate(NULL, [dataRef bytes], [dataRef length]);
Также обратите внимание, что, поскольку вы сами создаете объект, вы также должны разблокировать его, следуя Базовая базовая политика владения ; вы используете функцию CFRelease
для освобождения владельца базового объекта Foundation:
CFRelease(dr);
Это похоже на Управление памятью в Какао, и как только счет сохранения для базового базового объекта достигнет нуля, он будет освобожден.
Редактировать: Stefan
был совершенно прав, в своем комментарии, что NSData
и CFData
также являются бесплатными мостами на iPhone с Cocoa-Touch, как с какао, поэтому мой ответ был неверным. Я виноват в том, что должен был отредактировать его раньше.