AVAudioRecorder不会保留

时间:2012-07-24 13:19:23

标签: objective-c cocoa release dealloc avaudiorecorder

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

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

再往下我然后像这样分配init对象:

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的已知问题吗?

2 个答案:

答案 0 :(得分:1)

首先,根据您的评论,如果您仍然可以访问该实例,则意味着您的对象不是dealloc。

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

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

顺便说一句,不需要添加retain],因为您已获得对象的所有权,而您应该释放。{/ p>

答案 1 :(得分:0)

除非你发布它,否则无法发布,因为你分配和初始化而你没有释放。(它也不是自动释放的。)

如果启用了ARC,则必须强大。

请查看http://chinki-singh.blogspot.com/2011/07/how-to-record-audio-using.html

相关问题