我有一個在iOS上記錄音頻的類。我有一個類變量audioSettings
這是一個字典與音頻記錄器設置。我在類加載時創建obj
一次,然後調用recordAudio
方法,我將該字典分配給錄音機。錄音結束後,我release
和nil
audioRecorder
。下面是代碼:NSDictionary內存泄漏作爲類變量
- (void) recordAudio: (NSURL *) fileURL {
NSError * error = nil;
if (!audioSettings) {
//If no dict, fill it
[self setDefaultSettings];
}
audioRecorder = [[AVAudioRecorder alloc] initWithURL:fileURL settings:audioSettings error:&error];
//audioRecorder.delegate = self;
if (!error) {
[audioRecorder prepareToRecord];
if (!audioRecorder.recording) {
[audioRecorder record];
}
} else {
NSLog(@"Create Error: %@", [error localizedDescription]);
}
}
下面是創建字典:
- (void) setDefaultSettings {
audioSettings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:AVAudioQualityMin],
AVEncoderAudioQualityKey,
[NSNumber numberWithInt:16],
AVEncoderBitRateKey,
[NSNumber numberWithInt:2],
AVNumberOfChannelsKey,
[NSNumber numberWithFloat:44100.0],
AVSampleRateKey, nil];
}
記錄結束後我設置:
[audioRecorder release];
audioRecorder = nil;
這樣我就可以再次使用它而無需釋放整個類。
什麼是你的問題?這裏是什麼「class var?」使用訪問器而不是ivars會使這一切變得更加清晰,並避免在'recordAudio'中產生的不足(如Nekto指出的那樣)。 –
你在obj c中調用什麼類的var? – Mike007
Objective-C中本身沒有類變量。有靜態變量,可以實現基本相同的事情。你的命名使得audioRecorder是一個實例變量而且audioSettings是一個靜態變量是非常不清楚的。對類(靜態)變量使用實例變量和類方法的屬性會更好。 –