1

我遇到了这个错误,因为我只在家里编写 xcode,所以我没有资源可以快速提出最简单的 10 秒问题。所以这是今天出现的一个,我正在使用 AudioSessionAddPropertyListener 函数,我收到了这个警告:

将“CFTypeRef”(又名“const void” )传递给“void”类型的参数会丢弃限定符

从这行代码。

// Registers the audio route change listener callback function
// An instance of the audio player/manager is passed to the listener
AudioSessionAddPropertyListener (  kAudioSessionProperty_AudioRouteChange, 
                                 audioRouteChangeListenerCallback,  CFBridgingRetain(self) );

那么 AudioSessionAddPropertyListener 的定义是

AudioSessionAddPropertyListener(    AudioSessionPropertyID              inID,
                                AudioSessionPropertyListener        inProc,
                                void                                *inClientData)  

我看到 *inClientData 变量似乎是 void 类型(或者可能不是)

那么这里到底可能是什么问题,主要是我想知道在排除故障时要寻找什么。我不知道我不知道什么。

谢谢

史蒂夫

我还不到 50 岁,所以我无法评论:

我查看了 CFBridgingRetain 的定义,它需要 ID,并返回 CFTypeRef

NS_INLINE CF_RETURNS_RETAINED CFTypeRef CFBridgingRetain(id X) {
    return (__bridge_retained CFTypeRef)X;
}

现在 CFTypeRef 的定义是 void /* 所有“CF 对象”的基础“类型”,以及它们上面的多态函数 */ typedef const void * CFTypeRef;

所以为了放弃我这样做的警告,将函数的输出转换为 (void *)

AudioSessionAddPropertyListener (  kAudioSessionProperty_AudioRouteChange, 
                                 audioRouteChangeListenerCallback,  (void *) CFBridgingRetain(self) );

有没有人看到这个问题?

4

0 回答 0