将NSURL **强制转换为CFURLRef *
问题描述:
如何使用ARC编译以下代码?将NSURL **强制转换为CFURLRef *
int main() {
NSURL *url = [NSURL new];
NSURL * __strong *urlPointer = &url;
CFURLRef *cfPointer = (__bridge CFURLRef *)urlPointer;
geturl(cfPointer);
NSLog(@"Got URL: %@", url);
return 0;
}
我得到以下错误:
Incompatible types casting 'NSURL *__strong *' to 'CFURLRef *' (aka 'const struct __CFURL **') with a __bridge cast
我知道CFURLRef
已经是一个指针,所以CFURLRef *
是一个指针的指针,但是外部函数我使用(geturl
)需要一个CFURLRef *
作为参数。 我无法控制该功能,所以我无法改变这一点。
我怎么能投的urlPointer
到CFURLRef *
指针?
答
大多数时候,你在做什么,只是令人费解的指针课间操。为什么不只是这样做:
CFURLRef cfPointer = NULL;
geturl(&cfPointer);
NSURL *url = (__bridge NSURL *)cfPointer;
NSLog(@"Got URL: %@", url);
如果你的意思是在做'的getURL(urlPointer)',则没有,因为我得到的错误'间接指针的隐式转换成Objective-C的指针“CFURLRef *”(又名'const struct __CFURL **')不允许使用ARC。 – Tyilo 2013-02-22 00:36:54