3

UPDATED

なぜNSData dataWithContentsOfFileラインがインスツルメントでリークを示しているのですか? ARCを使用しています。展開ターゲットは iOS 5.0

@autoreleasepool
{
    AudioPlayerAV *context = [userInfo valueForKey:@"self"];
    NSString *filepath = [userInfo valueForKey:@"filepath"];
    [context.player stop];

    //check if file is there fetch player from dict
    AVAudioPlayer *_player = nil;
    NSError *error = nil;
    NSData *filedata = [NSData dataWithContentsOfFile:filepath];

    _player = [[AVAudioPlayer alloc]initWithData:filedata error:&error]; 
    context.player = _player;
    NSLog(@"loadAndPlay error : %@",[error description]);
    context.player.numberOfLoops = (context.loop)?-1:0;
    context.player.volume = context.volume;
    [context.player play];
}
4

1 に答える 1

2

楽器が間違ったラインを指していることがありますが、これはAVAudioPlayerのリークだと思います。

from:ARCを使用したNSURLおよびAVAudioPlayerからのリーク

Appleのコードのリークのようです...私は両方を使ってみました

-[AVAudioPlayer initWithData:error:]および-[AVAudioPlayer initWithContentsOfURL:error:]

最初のケースでは、割り当てられたAVAudioPlayerインスタンスは、渡されたNSDataを保持します。2番目では、渡されたNSURLが保持されます。

AVAudioPlayerオブジェクトがC++オブジェクトAVAudioPlayerCppを作成し、NSDataを再び保持していることがわかります。

後で、AVAudioPlayerオブジェクトが解放されると、NSDataが解放されますが、関連付けられたAVAudioPlayerCppからの解放呼び出しはありません...(添付の画像からわかります)

それをチェックしてください、答えに添付されたいくつかの楽器のスクリーンショットがあります。

于 2012-12-29T19:22:45.017 に答える