NSData 结果导致 NSTimer 延迟

NSData result causing delay in NSTimer

我有一个 NSTimer,它应该在 10 秒后触发它的选择器。但是由于 NSData 结果的延迟,定时器也被延迟并且在执行 NSData 操作后触发它的选择器。

        NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:10.0
                                         target:self
                                       selector:@selector(fireTimer)
                                       userInfo:nil
                                        repeats:NO];
        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:decryptedPath]];
        _audioPlayer = [[AVAudioPlayer alloc] initWithData:data error:nil];

在上面的代码中,Timer 等待 NSData 结果然后触发它的选择器。

这是因为 dataWithContentsOfURL: 正在阻塞主队列(这是计时器触发的地方)。你永远不应该那样做。您需要先使用 NSURLSession 下载它,一旦完成,然后将数据传递给 AVAudioPlayer。 AVAudioPlayer 不是为流媒体设计的。