抱歉,如果这太含糊了......这是我在这里的第一篇文章,我真的很困惑这个问题!
我一直在尝试将使用音频单元的 iOS Xcode 项目转换为 ARC,但它似乎破坏了音频单元处理类的功能。一些症状...当我尝试在 AUProcessor.mm 中引用“self”时,AUProcessor 类被称为“const*”,而在 ARC 之前的版本中,没有提到“const*”。
这个指向“self”的指针会产生以下错误:
callbackStruct.inputProcRefCon = self;
[错误] 从不兼容的类型“AUProcessor *const __strong”分配给“void *”。
我可以通过在 self 前面添加 (__bridge void*) 来消除错误,这允许项目编译。但是,音频单元处理器在应用程序中不起作用。
在引用类的方式方面,我在代码的其他地方看不到任何与 ARC 之前的版本有显着不同的地方。
如果需要更多上下文,请告诉我。
提前致谢!
(顺便说一句,感谢这些论坛的所有贡献者......对于敏锐但缺乏经验的程序员来说,它们确实是一个很好的资源!)
最佳答案
通常,(__bridge void*)
在这里是正确的转换。这意味着“在不应用任何内存管理的情况下获取指向该对象的指针;我保证只要需要它,我就会一直保留它。” (最后一部分只是隐含的,但如果你不这样做,你就会崩溃。)
你确定 self
会在这个音频单元存在的时间里继续存在吗?如果没有对 self
的强引用,那么它将消失并且 inputProcRefCon
将成为一个悬空指针。
当您说“在应用程序中不起作用”时,您是什么意思?它会崩溃吗?回调不会发生吗?当回调发生时,它没有正确的数据吗?
关于ios - 将音频单元代码转换为 ARC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9472016/