2013-02-22 97 views
3

如何使用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 *作为参数。 我无法控制该功能,所以我无法改变这一点。

我怎么能投的urlPointerCFURLRef *指针?

+0

如果你的意思是在做'的getURL(urlPointer)',则没有,因为我得到的错误'间接指针的隐式转换成Objective-C的指针“CFURLRef *”(又名'const struct __CFURL **')不允许使用ARC。 – Tyilo 2013-02-22 00:36:54

回答

10

大多数时候,你在做什么,只是令人费解的指针课间操。为什么不只是这样做:

CFURLRef cfPointer = NULL; 
geturl(&cfPointer); 
NSURL *url = (__bridge NSURL *)cfPointer; 
NSLog(@"Got URL: %@", url);