【问题标题】:Cast NSURL ** to CFURLRef *将 NSURL ** 转换为 CFURLRef *
【发布时间】:2013-02-22 00:33:59
【问题描述】:

如何使用 ARC 编译以下代码?

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 * 指针?

【问题讨论】:

  • 如果你的意思是做geturl(urlPointer),那么不,因为我收到错误Implicit conversion of an indirect pointer to an Objective-C pointer to 'CFURLRef *' (aka 'const struct __CFURL **') is disallowed with ARC

标签: objective-c pointers automatic-ref-counting


【解决方案1】:

你所做的大部分只是复杂的指针健美操。为什么不这样做:

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

【讨论】:

    猜你喜欢
    • 2016-08-15
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2012-02-10
    • 1970-01-01
    • 2016-03-12
    • 2014-12-18
    相关资源
    最近更新 更多