假设我有一个包含CFString的CFArray:
CFStringRef strs[3];
CFArrayRef anArray;
strs[0] = CFSTR("String One");
strs[1] = CFSTR("String Two");
strs[2] = CFSTR("String Three");
anArray = CFArrayCreate(NULL, (void *)strs, 3, &kCFTypeArrayCallBacks);
如果我使用CFBridgingRelease将CFArrayRef转换为NSArray *(并且在此过程中将数组对象的所有权转移到ARC),那么原始数组的每个元素是否也会自动获得CFBridgingRelease调用?似乎,一旦我做了:
NSArray * arrayInArc = CFBridgingRelease(anArray);
我可以将NSArray的元素视为NSString,而无需在每个原始CFStringRef上显式调用CFBridgingRelease:
NSString * a0 = arrayInArc[0];
是否有任何文档说明当您将集合的所有权(例如CFArray)转移到ARC时,其元素的所有权也会被转移?
谢谢,
答案 0 :(得分:0)
CFBridingRelease不会更改数组的类型.CFArrayRef<> NSArray *在此之前是相同的,它只是告诉编译器为你管理保留/释放调用
数组如何释放其内容不受其影响 你没有引用内容,数组呢!并且CFArrayRef / NSArray *管理带/不带弧的保留/释放调用。
基本理念:只关心你自己发布的东西。 (在本例中为数组本身)