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 不是为流媒体设计的。
我有一个 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 不是为流媒体设计的。