【发布时间】:2012-07-24 13:19:22
【问题描述】:
我在我的 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 的一个已知问题吗?
【问题讨论】:
-
您是否在程序上运行了僵尸程序来检查保留计数?如果
audioRecorder被释放,如果你在上面调用isRecording,你似乎会遇到错误的访问错误。 -
如果我在仪器中运行它,则不会创建 NSZombie。当我调用
isRecording时,我也没有收到错误或错误的访问调用。
标签: objective-c cocoa release dealloc avaudiorecorder