转换到后台时,NSTimer不可靠

时间:2016-08-08 20:28:34

标签: ios objective-c nstimer

我使用NSTimer每隔x秒播放一个音频文件。音频文件与持续运行的进程同步,因此NSTimer的间隔时间最短(据我所知):

self.updateTimer = [NSTimer scheduledTimerWithTimeInterval:0.02 target:self selector:@selector(updateTimerFired:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:self.updateTimer forMode:NSRunLoopCommonModes];

我的问题发生在转换到背景状态期间,例如当用户单击主页按钮时。似乎计时器发生延迟,并且" updateTimerFired:"在转换期间,方法不被可靠地调用。这导致音频文件播放不同步,尽管它们最终会在转换完成后同步备份。请注意,我的应用程序包含音频背景模式。

是否有比NSTimer更可靠的工具来确保在转换到后台时不会发生延迟?

1 个答案:

答案 0 :(得分:1)

结束用"dataset": [ <cfoutput query="all_dates" group="Month_new"> { "seriesname": "#all_dates.Month_new#", "data": [ <cfoutput> <cfif all_dates.CurrentRow GT 1> <cfif previous_month EQ all_dates.Month_new and all_dates.CurrentRow LT all_dates.RecordCount> , <br> <cfelse> <br> </cfif> </cfif> { "value": "#sum_total#" } <cfset previous_month = all_dates.Month_new> </cfoutput> ] } <cfif all_dates.CurrentRow LT all_dates.RecordCount>,</cfif> <br> </cfoutput> 替换NSTimer:

dispatch_source_create

这为计时器提供了一个专用队列,并且不会因向后台的转换而中断。