0

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

谢谢,

4

1 回答 1

1

CFBridingRelease 不会改变数组的类型。 CFArrayRef <> NSArray* 甚至以前也是一样的,它只是告诉编译器为你管理保留/释放调用

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


基本理念:只关心发布你拥有的东西。(在这种情况下,数组本身)

于 2013-11-01T09:28:38.003 回答