如何将CFArrayRef转换为NSArray?

use*_*429 9 iphone nsarray ios

可能重复:
如何将CFArrayRef创建为NSMutableArray

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

Jod*_*ins 39

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

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

CFArrayRef someArrayRef = ...;
NSArray *array = (__bridge NSArray*)someArrayRef;
Run Code Online (Sandbox Code Playgroud)

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

CFArrayRef someArrayRef = ...;
NSArray *array = CFBridgingRelease(someArrayRef);
Run Code Online (Sandbox Code Playgroud)

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


El *_*per 5

你应该能够施展它:

CFArrayRef *myLegacyArray = ...

...

NSArray *myArray=[(NSArray *)myLegacyArray copy];
Run Code Online (Sandbox Code Playgroud)

  • 你不需要复制它。免费桥接实际上只是“NSArray* myNsArray = (NSArray*) myCfArray;” (2认同)