49、对自定义其内存管理语义的collection使用无缝桥接

NSArray *anNSArray = @[@1, @2, @3];
CFArrayRef aCFArray = (__bridge CFArrayRef)anNSArray;
CFArrayGetCount(aCFArray); // array.count
// __bridge: ARC仍拥有该OC对象的所有权
// __bridge_retained: ARC交出该OC对象的所有权,之后需要 CFRealease(aCFArray) 来释放
NSArray *anNSArray = (__bridge_transfer)aCFArray; // ARC获得所有权

无缝桥接必要性:因为Foundation框架中OC类所具备的某些功能,是CoreFoundation框架中的C语言数据结构所不具备的,反之亦然。

(具体使用,这里不再赘述了)

要点:

  • 通过无缝桥接技术,可以在Foundation框架中昂的OC对象与CoreFoundaton框架中的C语言数据结构之间来回转换

  • CoreFoundation层面创建collection时,可以指定许多回调函数,这些函数表示此collection应如何处理其元素。然后可运用无缝桥接技术,将其转换成具备特殊内存管理语义的OC collection

Last updated

Was this helpful?