抱歉,如果这太含糊了……这是我在这里的第一篇文章,我对这个问题真的很困惑!

我一直在尝试将使用音频单元的 iOS Xcode 项目转换为 ARC,但它似乎破坏了音频单元处理类的功能。一些症状...当我尝试在 AUProcessor.mm 中引用“self”时,AUProcessor 类被称为“const*”,而在 ARC 之前的版本中,没有提到“const*”。

这个指向“self”的指针会产生以下错误:
callbackStruct.inputProcRefCon = self;[error] Assigning to 'void *' from incompatible type 'AUProcessor *const __strong'.
我可以通过在 self 之前添加 (__bridge void*) 来消除错误,这允许项目编译。但是,音频单元处理器在应用程序中不起作用。

我在代码中的其他地方看不到任何与 ARC 之前版本在类的引用方式方面有显着不同的地方。

如果需要更多上下文,请告诉我。

提前致谢!!

(顺便说一句,感谢这些论坛的所有贡献者......对于敏锐但缺乏经验的程序员来说,它们确实是一个很好的资源!)

最佳答案

通常, (__bridge void*) 在这里是正确的转换。这意味着“在不应用任何内存管理的情况下获取指向此对象的指针;我保证只要需要,我就会一直持有它。” (最后一部分只是暗示,但如果你不这样做,你会崩溃。)

您确定 self 一直存在于这个音频单元吗?如果没有对 self 的强引用,那么它就会消失并且 inputProcRefCon 将成为一个悬空指针。

当您说“在应用程序中不起作用”时,您是什么意思?它会崩溃吗?回调不会发生吗?当回调发生时,它是否没有正确的数据?

关于ios - 将音频单元代码转换为 ARC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9472016/

10-11 22:16