我在我的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:我重新创建了这个项目--称为测试,并从我的旧项目中复制了源代码。现在起作用了?!!去想一想。源代码是一行一行相同的。这是已知的XCode问题吗?
发布于 2012-07-24 13:57:37
首先,根据您的注释,如果您仍然可以访问实例,就意味着您的对象不是dealloc。
AVAudioRecorder提供了一个委托(AVAudioRecorderDelegate),如果记录成功,或者您得到了一些错误,您是否尝试使用该委托进行日志记录?
特别是,方法audioRecorderEncodeErrorDidOccur:error:应该给您一些错误,如果发生时,记录。
顺便说一句,添加retain]并不需要,因为alloc init已经拥有了对象的所有权,并且应该发布。
发布于 2012-07-24 13:44:37
它不能被释放,除非你释放它,因为你分配和输入它,你不释放。(它也不是自动释放的。)
如果启用ARC,则必须是强大的。
请看http://chinki-singh.blogspot.com/2011/07/how-to-record-audio-using.html
https://stackoverflow.com/questions/11631755
复制相似问题