抱歉,如果这太含糊了……这是我在这里的第一篇文章,我对这个问题真的很困惑!
我一直在尝试将使用音频单元的 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/