9

可能重复:
如何将 CFArrayRef 设置为 NSMutableArray

我知道有很多关于这个问题的信息,但是每个答案都是“这很容易。你可以做免费的桥接。”,然后没有提到实际的源代码。我知道免费桥接和投射的平均值。我想知道确切的源代码“如何将 CFArrayRef 转换为 NSArray?” . 请任何人!!!!!!!

4

2 回答 2

40

好吧,首先你必须知道你是否使用 ARC,因为规则会有所改变。接下来,你需要知道你真正想用你的演员做什么。你只是想使用价值,还是转移所有权?

我将假设 ARC,因为,IMO,所有新代码都应该使用 ARC(而 ARC 是铸造问题更普遍的地方)。

CFArrayRef someArrayRef = ...;
NSArray *array = (__bridge NSArray*)someArrayRef;

上面的代码将 CF 引用转换为NSArray*可以在当前上下文中使用的一个。没有发生所有权转让。 someArrayRef仍然持有它的引用,你仍然必须手动释放someArrayRef,否则它会泄漏。

CFArrayRef someArrayRef = ...;
NSArray *array = CFBridgingRelease(someArrayRef);

在这段代码中,您不仅获得了演员阵容,而且还获得了所有权转移。 someArrayRef现在不再持有引用,因此不需要手动释放。相反,当array释放时,对象将释放(假设在其他地方没有其他引用)。

于 2012-09-05T16:03:08.713 回答
5

你应该能够投射它:

CFArrayRef *myLegacyArray = ...

...

NSArray *myArray=[(NSArray *)myLegacyArray copy];
于 2012-09-05T15:52:47.163 回答