我在应用中实现了一个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%而烦恼?
答案 0 :(得分:0)
如果你说无论你启动和停止AudioRecording有多少都会保持3%,那么就没有泄漏,但SoundRecording框架可能已经缓存了一些私人录音实例(位于Apple框架后面并发生的事情)其中一个原因是 - 下次开始录制的速度比第一次要快。如果不再使用声音播放器,则会释放这些缓存的实例,并且需要额外的内存。
我认为类似的是AVPlayer和MFMessageComposeViewController(可能还有更多的框架/ api,它们很重要) - 因为 - 对于这两个提到的框架 - 我第一次尝试显示SMS表单时,或者播放视频 - 有一个明显的延迟。在那之后 - 没有延迟。所以在第一次它可能会在缓存中加载一些重要的东西,可以在没有可用内存或应用程序关闭的情况下自动清除。
所以我认为不要为此烦恼。