包含CFString的CFArray的CFBridgingRelease

时间:2013-11-01 08:54:15

标签: ios objective-c ios7

假设我有一个包含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时,其元素的所有权也会被转移?

谢谢,

1 个答案:

答案 0 :(得分:0)

CFBridingRelease不会更改数组的类型.CFArrayRef<> NSArray *在此之前是相同的,它只是告诉编译器为你管理保留/释放调用

数组如何释放其内容不受其影响 你没有引用内容,数组呢!并且CFArrayRef / NSArray *管理带/不带弧的保留/释放调用。


基本理念:只关心你自己发布的东西。 (在本例中为数组本身)