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