Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 音频队列和EXC_坏访问_Cocoa_Core Audio_Audioqueue - Fatal编程技术网

Cocoa 音频队列和EXC_坏访问

Cocoa 音频队列和EXC_坏访问,cocoa,core-audio,audioqueue,Cocoa,Core Audio,Audioqueue,这是我使用音频队列生成噪音的代码: 问题是我的代码生成了一个EXC_BAD_访问。问题似乎出在作业上 MAAudioManager *audioMngr = (__bridge MAAudioManager *) inUserData; 在回调例程中。 我怀疑这可能与MAAudioManager类线程的访问有关 有什么想法吗?程序中是否有其他地方保留了MAAudioManager实例?在调用回调时,它似乎已被解除锁定。你说得对。没有圆弧的相同程序运行良好。似乎ARC发布了MAAudi

这是我使用音频队列生成噪音的代码:

问题是我的代码生成了一个EXC_BAD_访问。问题似乎出在作业上

    MAAudioManager *audioMngr = (__bridge MAAudioManager *) inUserData;
在回调例程中。 我怀疑这可能与MAAudioManager类线程的访问有关


有什么想法吗?

程序中是否有其他地方保留了
MAAudioManager
实例?在调用回调时,它似乎已被解除锁定。

你说得对。没有圆弧的相同程序运行良好。似乎ARC发布了MAAudioManager实例。好的,我需要学习更好的弧线。同时,有没有关于如何避免圆弧释放对象的想法?谢谢您需要在某处保留一个指向MAAudioManager实例的指针。例如,您可以将其保存在创建它的对象的实例变量或应用程序委托中。在NSZombie打开的情况下进行调试也是一个好主意,您可以在“Scheme”对话框中执行此操作,该选项称为“Enable zombie objects”。启用该选项后,您将获得更多信息,而不仅仅是EXC_BAD_访问。实际上,您已经拥有
MAAudioManager*audio=[[MAAudioManager alloc]init]。可能我遗漏了什么,那是一个局部变量。一旦方法结束,变量将超出范围并被删除。这就是ARC释放对象的原因。您需要将
audio
声明为实例变量,这意味着在应用程序委托
@接口
部分(在头文件中)中声明它,如
MAAudioManager*audio
。只要对象存在,一个声明存在的变量就会存在,对于应用程序委托,该变量就是应用程序的生命周期。然后,您可以用
audio=[[MAAudioManager alloc]init]
替换发布的行。