Я разрабатываю приложение для iPhone 3.1.3.
У меня есть следующий код в viewDidLoad
методе:
NSURL *url = [NSURL fileURLWithPath:@"/dev/null"];
NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat: 44100.0], AVSampleRateKey,
[NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey,
[NSNumber numberWithInt: 2], AVNumberOfChannelsKey,
[NSNumber numberWithInt: AVAudioQualityMax], AVEncoderAudioQualityKey,
nil];
NSError *error;
if (recorder == nil)
recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error];
if (recorder) {
[recorder prepareToRecord];
recorder.meteringEnabled = YES;
[recorder record];
levelTimer = [NSTimer scheduledTimerWithTimeInterval: 0.03
target: self
selector: @selector(levelTimerCallback:)
userInfo: nil
repeats: YES];
Примечание: я проверяю, был ли создан recorder
, прежде чем создавать новый с этим кодом в viewDidLoad
:
if (recorder == nil)
recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error];
Когда я перехожу из этого ViewController в другой ViewController, я делаю это:
[levelTimer invalidate];
levelTimer = nil;
[recorder pause];
И, наконец, я выпускаю recorder
на dealloc
:
- (void)dealloc {
if (recorder != nil) {
[recorder release];
}
}
Запуск его с опцией Xcode «Запуск с Performance Tool», поиск утечек, я получаю утечки с AVAudioRecorder
.
Программа перейдет из этого первого ViewController во второй ViewController. И затем, когда пользователь захочет, он перейдет от второго ViewController к первому ViewController и выполнит первый добавленный мной код.
Есть ли проблемы с памятью? Вы знаете лучший способ сделать это? Я хочу избежать записи, пока пользователь находится во втором viewController.