2011-07-05 13 views
0

私はiPhone 3.1.3アプリを開発しています。AVAudioRecorderのメモリリーク

I viewDidLoad方法で次のコードを持っている:

if (recorder == nil) 
     recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error]; 

私は移動:

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でこのコードを使用して新しいものを作成し作成されている場合、私がチェックこのViewControllerから別のViewControllerに私はこれを行う:

[levelTimer invalidate]; 
levelTimer = nil; 
[recorder pause]; 

そして最後に、私はdeallocrecorderをリリース:

「パフォーマンスツールを実行して」Xcodeのオプションでそれを実行する
- (void)dealloc { 
    if (recorder != nil) { 
     [recorder release]; 
     } 
} 

、リークを探して、私はAVAudioRecorderでリークを取得しています。

プログラムは、この最初のViewControllerから2番目のViewControllerに移動します。そして、ユーザーが望むときは、2番目のViewControllerから最初のViewControllerに移動し、追加した最初のコードが実行されます。

メモリに問題はありますか?あなたはこれを行うより良い方法を知っていますか?私は、ユーザーが第2のviewControllerにいる間に録画を避けたい。

答えて

0

ここでは、recorderをリリースしています。 deallocメソッドでそれを解放している場合や、まったく解放していない場合は、上に貼り付けたコードがviewDidLoadなどでトリガされていると仮定すると、リークが発生する可能性があります。 recorderは、ビューがリロードされるたびに新しいAVAudioRecorderが割り当てられますが、(ビューコントローラがdeallocされたときに)1回だけ解放されます。

+0

私はdeallocでリリースしています。 – VansFannel

+0

私の質問を詳細で更新しました。私は新しいものを作成するためにレコーダー== nilかどうかをチェックするので、私はすべてのビューのリロードで1つを作成しているとは思わない。 – VansFannel