可能是重复问题:
如何将CFArrayRef转换为NSMutableArray
我知道有很多关于这个问题的信息,但每个答案都是"这很容易。你可以进行桥接强制转换",然后就没有提到实际的源代码。 我知道桥接和强制转换的意思。 我想知道确切的源代码"如何将CFArrayRef转换为NSArray?"。 麻烦有人能帮忙!!!!
可能是重复问题:
如何将CFArrayRef转换为NSMutableArray
我知道有很多关于这个问题的信息,但每个答案都是"这很容易。你可以进行桥接强制转换",然后就没有提到实际的源代码。 我知道桥接和强制转换的意思。 我想知道确切的源代码"如何将CFArrayRef转换为NSArray?"。 麻烦有人能帮忙!!!!
首先你需要知道你是否在使用ARC,因为规则会有一些变化。其次,你需要知道你想要用你的转换做什么。你是只想使用这个值,还是要转移所有权?
我会假设你在使用ARC,因为在我看来,所有新代码都应该使用ARC(而且ARC是转换问题更普遍的地方)。
CFArrayRef someArrayRef = ...;
NSArray *array = (__bridge NSArray*)someArrayRef;
以上代码将CF引用转换为NSArray*
,以便在当前上下文中使用。没有所有权的转移发生。someArrayRef
仍然保留其引用,您仍然必须手动释放someArrayRef
,否则它将泄漏。
CFArrayRef someArrayRef = ...;
NSArray *array = CFBridgingRelease(someArrayRef);
在这段代码中,你不仅得到了一个类型转换,还得到了所有权的转移。someArrayRef
现在不再持有该引用,因此无需手动释放。相反,当array
释放时,对象将被释放(假设其他地方没有其他引用)。你应该能够投射它:
CFArrayRef *myLegacyArray = ...
...
NSArray *myArray=[(NSArray *)myLegacyArray copy];
NSArray* myNsArray = (NSArray*) myCfArray;
。 - jjv360