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应如何处理其元素。然后可运用无缝桥接技术,将其转换成具备特殊内存管理语义的OCcollection
Last updated
Was this helpful?