gpt4 book ai didi

objective-c - AVAudioRecorder 不会保留

转载 作者:行者123 更新时间:2023-12-03 17:57:00 27 4
gpt4 key购买 nike

我在我的 Mac 应用程序中使用 AVAudioRecorder。在我的 .m 文件中我声明

@interface RecordViewController ()
{
AVAudioRecorder *audioRecorder;
...
}
@end

接下来,我像这样分配初始化对象:

audioRecorder = [[[AVAudioRecorder alloc] initWithURL:soundFileURL settings:recorderSettings error:&error] retain];
...
[audioRecorder prepareToRecord];
...
[audioRecorder record];

我可以看到文件已创建,但它只有 4KB。我没有收到错误,但是当我测试 [audioRecorder isRecording] 时,我可以看到 [audioRecorder 不再录制。我假设该对象已被释放,即使我没有使用 ARC 并且未调用 dealloc 方法。

我对 AVAudioPlayer 也有类似的问题,但附加到 alloc init 的附加 retain] 解决了这个问题。

我做错了什么?

谢谢

更新1:

我什至尝试执行以下操作(全部采用相同的方法):

[audioRecorder record];
NSLog(@"recording is ... %d", [audioRecorder isRecording]);

结果是 0。???

我必须使用self吗?或者延迟实例化 audioRecorder

更新2:我重新创建了该项目 - 将其命名为 TEST 并从我的旧项目中复制了源代码。现在可以用了吗?!?!去搞清楚。源代码逐行相同。这是 XCode 的已知问题吗?

最佳答案

首先,根据您的评论,如果您仍然可以访问该实例,则意味着您的对象没有被释放。

AVAudioRecorder 提供了一个委托(delegate)( AVAudioRecorderDelegate ),如果录制成功或者出现一些错误,您是否尝试过使用该委托(delegate)进行日志记录?

特别是方法 audioRecorderEncodeErrorDidOccur:error: 如果在录制时发生,应该会给您一些错误。

顺便说一句,不需要添加retain],因为通过alloc init,您已经获得了对象的所有权,并且应该释放。

关于objective-c - AVAudioRecorder 不会保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11631755/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com