使用ARC不允许将Objective-C指针隐式转换为'void*'

Ali*_*Ali 32 objective-c core-audio automatic-ref-counting

这意味着什么,我有什么选择?

implicit conversion of an Objective-C pointer to 'void *' is disallowed with ARC
Run Code Online (Sandbox Code Playgroud)

我正在将一个Xcode3项目移植到iOS5,它使用AudioSessionInitialize

AudioSessionInitialize(NULL, NULL, NULL, self);
Run Code Online (Sandbox Code Playgroud)

其中,self这里是一个视图控制器.

Kaz*_*oto 50

您应该使用__bridge强制转换它.

AudioSessionInitialize(NULL, NULL, NULL, (__bridge void *)self);
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案,我相信我在添加__bridge演员之前回答了. (4认同)
  • objc_unretainedPointer是"__attribute __((cf_returns_not_retained)"const void*objc_unretainedPointer(id object){return object;}".这两者都有相同的效果,但是,至少,__ bridge有详细记录,objc_unretainedPointer没有记录. (3认同)

Jos*_*erg 30

你不能再进行隐式强制转换void*,AudioSessionInitialize(NULL, NULL, NULL, objc_unretainedPointer(self));应该这样做.

编辑:历史观点,上面的答案是在__bridge演员表最终确定之前.在现代代码中,正确的答案是由@KazukiSakamoto提供的,AudioSessionInitialize(NULL, NULL, NULL, (__bridge void*)self);