首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自AVAudioRecorder的泄漏

来自AVAudioRecorder的泄漏
EN

Stack Overflow用户
提问于 2010-11-09 09:02:55
回答 1查看 1.3K关注 0票数 1

这是一个看似简单的API。我认为我完全错误地释放了AVAudioRecorder对象,但即使消除了这个问题,我仍然收到了泄漏报告。

下面是我用来处理记录的四种方法:

代码语言:javascript
复制
-(void) startRecording {

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:&err];
[[AVAudioSession sharedInstance] setActive:YES error:nil];

NSError *err;
err = nil;

AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:audioFileURL settings:nil error:&err];

//show user an error on fail
if (!recorder) {
        NSLog(@"recorder: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning" message:[err localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
        [alert release];
        return;
}

[recorder prepareToRecord];
recorder.delegate = self;
recorder.meteringEnabled = NO;

self.isRecording = YES;
[self colorRecordingLight];
[self toggleButtons:3];

[recorder record];

self.audioRecorder = recorder;
[recorder release];

}

-(void) stopRecording {

[audioRecorder stop];
[self cleanupPostRecording];


}

-(void) audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag {

//if this page didn't have audio before, it does now.
self.hasAudio = YES;
[self cleanupPostRecording];

}

-(void) cleanupPostRecording {

[[AVAudioSession sharedInstance] setActive:NO error:nil];

self.isRecording = NO;
[self setAudioRecorder:nil];
[self toggleButtons:4];
[self colorRecordingLight];



}

我得到了多个泄漏(当在设备上运行时):

代码语言:javascript
复制
Leaked Object   #   Address Size    Responsible Library Responsible Frame
NSCFDictionary      0x16dc20    64  AVFoundation    prepareToRecordQueue(AVAudioRecorder*, AudioRecorderImpl*)
GeneralBlock-32     0x16cf00    32  AVFoundation    prepareToRecordQueue(AVAudioRecorder*, AudioRecorderImpl*)
NSCFNumber      0x160f30    16  Foundation  -[NSPlaceholderNumber initWithUnsignedInteger:]

泄漏告诉我,我正在进行的电话是100%负责的是记录器prepareToRecord;

有没有人看过这个或者能给我一个启示?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-09 10:03:01

我能够消除这个漏洞。

在我最初发布的代码中,我从NSString生成了一个NSURL,并将其存储在一个属性中。

每次我分配一个AVAudioRecorder,我都会直接从属性中传递给它这个NSURL。

通过将我的文件位置存储为NSString实例变量,然后每次从该字符串创建一个新的NSURL,并将这个新的NSURL传递给我新分配的AVAudioRecorder,它就可以工作,并且不会产生这些泄漏。

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

https://stackoverflow.com/questions/4129575

复制
相关文章

相似问题

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