您不能只将NSData
对象强制转换为CFDataRef
; 如文档中所述, aCFDataRef
是“对不可变 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]);
另请注意,由于您自己创建对象,因此您还必须按照Core Foundation Ownership Policy释放它;您使用该CFRelease
函数来释放 Core Foundation 对象的所有权:
CFRelease(dr);
这类似于 Cocoa 中的内存管理,一旦 Core Foundation 对象的保留计数达到零,它将被释放。
编辑: Stefan
在他的评论中是完全正确的,NSData
并且CFData
在 iPhone 上使用 Cocoa-Touch 和 Cocoa 一样也是免费桥接的,所以我原来的答案是错误的。我的错,应该之前编辑过。