如何防止AVAudioRecorder在“睡眠”时占用3%的CPU

时间:2014-01-21 08:32:12

标签: ios automatic-ref-counting avaudiorecorder

我在应用中实现了一个AudioPlayer。我一打电话给[AVAudioRecorder prepareToRecord]; CPU使用率高达5%。很好,因为有用的东西正在发生。但是在[AVAudioRecorder停止]之后;被调用,CPU降至3%并保持不变。

这是我实现录像机的代码:

- (void)prepareRecorder
{
    outputFileString = [NSString stringWithFormat:@"%@/%@", [self applicationDocumentsDirectory], @"audio.m4a"];

    NSArray *pathComponents = [NSArray arrayWithObjects:[self applicationDocumentsDirectory], @"audio.m4a", nil];
    outputFileURL = [NSURL fileURLWithPathComponents:pathComponents];

    AVAudioSession *session = [AVAudioSession sharedInstance];
    [session setActive:YES error:nil];
    [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];

    NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init];    
    [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
    [recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
    [recordSetting setValue:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey];

    recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordSetting error:nil];
    recorder.delegate = self;
    recorder.meteringEnabled = YES;
    [recorder prepareToRecord];
}

我不知道是否可以在ARC中释放/解除对象,但我尝试了

recorder = Nil;

我该如何解决这个问题?或者我不应该为3%而烦恼?

1 个答案:

答案 0 :(得分:0)

如果你说无论你启动和停止AudioRecording有多少都会保持3%,那么就没有泄漏,但SoundRecording框架可能已经缓存了一些私人录音实例(位于Apple框架后面并发生的事情)其中一个原因是 - 下次开始录制的速度比第一次要快。如果不再使用声音播放器,则会释放这些缓存的实例,并且需要额外的内存。

我认为类似的是AVPlayer和MFMessageComposeViewController(可能还有更多的框架/ api,它们很重要) - 因为 - 对于这两个提到的框架 - 我第一次尝试显示SMS表单时,或者播放视频 - 有一个明显的延迟。在那之后 - 没有延迟。所以在第一次它可能会在缓存中加载一些重要的东西,可以在没有可用内存或应用程序关闭的情况下自动清除。

所以我认为不要为此烦恼。