首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVAudioRecorder不再保留

AVAudioRecorder不再保留
EN

Stack Overflow用户
提问于 2012-07-24 13:19:22
回答 2查看 511关注 0票数 0

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

代码语言:javascript
复制
@interface RecordViewController ()
{
    AVAudioRecorder *audioRecorder;
...
}
@end

接下来,我给出了这样的对象:

代码语言:javascript
复制
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:

我甚至尝试做了以下工作(都是用相同的方法):

代码语言:javascript
复制
[audioRecorder record];
NSLog(@"recording is ... %d", [audioRecorder isRecording]);

结果是0。???

我必须使用self吗?或者懒散地实例化audioRecorder

更新2:我重新创建了这个项目--称为测试,并从我的旧项目中复制了源代码。现在起作用了?!!去想一想。源代码是一行一行相同的。这是已知的XCode问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-24 13:57:37

首先,根据您的注释,如果您仍然可以访问实例,就意味着您的对象不是dealloc。

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

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

顺便说一句,添加retain]并不需要,因为alloc init已经拥有了对象的所有权,并且应该发布。

票数 1
EN

Stack Overflow用户

发布于 2012-07-24 13:44:37

它不能被释放,除非你释放它,因为你分配和输入它,你不释放。(它也不是自动释放的。)

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11631755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档