AVAudioPlayer播放结果在类_NSThreadPerformInfo中自动释放,没有池到位 - 只是泄漏

时间:2013-01-28 18:03:23

标签: ios automatic-ref-counting avaudioplayer

Mucho tiempo浪费在此 - 我使用AVAudioPLayer进行相当简单的播放,但是当文件播放完毕后,我在调试窗口中收到此消息:

  

objc [39752]:类_NSThreadPerformInfo的对象0x7304d80   没有游泳池的自动释放 - 只是泄漏 - 打破   objc_autoreleaseNoPool()调试

这是我的播放和回调函数(我已经简化了文件名创建,但错误是相同的):

@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错误是多么令人眼花缭乱?

1 个答案:

答案 0 :(得分:0)

好吧,我好像已经解决了。 Apple Dev Support告诉我这个错误永远不应该发生,这让我认为它必须是5.x SDK中的一些模糊的错误,但最后我整理了所有的类,将ivars重新定义为扩展中的属性或属性在适当的情况下,确保我的所有属性修饰符都是正确的等问题已经消失。

很抱歉,我无法明确指出罪魁祸首,但显然存在内存管理问题。