0

Mucho tiempoはこれに無駄になっています-AVAudioPLayerを使用してかなり簡単に再生できますが、ファイルの再生が終了すると、デバッグウィンドウに次のメッセージが表示されます。

objc [39752]:クラス_NSThreadPerformInfoのオブジェクト0x7304d80が自動リリースされ、プールが配置されていません-リークしているだけです-objc_autoreleaseNoPool()で中断してデバッグします

これが私のplay関数とcallback関数です(ファイル名の作成を簡略化しましたが、エラーは同じです):

@implementation PlaybackEngine {
    int _pbIndex;
    AVAudioPlayer *_player;
    NSArray *fileList;
    BufferStores *_BS;
}
....

    -(BOOL)startPlayback {
        NSURL *playURL = [[NSURL alloc] initWithString:[[DOCUMENTS_FOLDER stringByAppendingPathComponent:@"28Jan13_17:13:21.aif"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

        printf("Playback file URL = %s\n", [[playURL path] UTF8String]);
        _player = [[AVAudioPlayer alloc] initWithContentsOfURL:playURL error:nil];
        _player.delegate = self;

        [_player prepareToPlay];
        [_player play];

        self.playing = YES;
        return YES;    
    }

    -(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {

        // check for player stopping due to bad audio data
        if (!flag) {
            printf("Player finished playing due to bad audio data");
        }

        self.playing = NO;
        _player = nil;

    }

ブレークポイントをオンに設定しようとしましたobjc_autoreleaseNoPoolが、ヒットしません。私が犯している、目がくらむほど明白なARCの間違いは何ですか?

4

1 に答える 1

0

さて、私はそれを解決したようです。Apple Dev Supportから、このエラーは発生しないはずだと言われました。これは、5.x SDKのあいまいなバグであるに違いないと思いましたが、最終的にはすべてのクラスを整理し、ivarをプロパティまたは拡張機能のプロパティとして再定義しました。必要に応じて、すべてのプロパティ修飾子が正しいことなどを確認し、問題が解決したことを確認します。

申し訳ありませんが、原因を明確に特定することはできませんが、明らかにメモリ管理の問題です。

于 2013-04-16T08:34:33.047 に答える