我有一个在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是一个静态变量是非常不清楚的。对类(静态)变量使用实例变量和类方法的属性会更好。 –