如何将CFArrayRef转换为NSArray?

时间:2012-09-05 15:48:50

标签: iphone ios nsarray

  

可能重复:
  How to make an CFArrayRef to an NSMutableArray

我知道有很多关于这个问题的信息,但每一个答案都是“这很简单。你可以做免费桥接。”,然后没有提到实际的源代码。 我知道免费桥接和演员的意思。 我想知道确切的源代码“如何将CFArrayRef转换为NSArray?” 。 有人请!!!!!!

2 个答案:

答案 0 :(得分:39)

嗯,首先你必须知道你是否使用ARC,因为规则有所改变。接下来,您需要知道您的演员实际上想要做什么。您只是想使用该值,还是转让所有权?

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

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

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

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

在此代码中,您不仅可以获得演员表,还可以获得所有权转让。 someArrayRef现在不再保留引用,因此不需要手动释放。相反,当array释放时,该对象将被释放(假设其他地方没有其他引用)。

答案 1 :(得分:5)

你应该能够施展它:

CFArrayRef *myLegacyArray = ...

...

NSArray *myArray=[(NSArray *)myLegacyArray copy];