调度函数调用

时间:2017-10-17 10:04:57

标签: ios objective-c multithreading

我有功能,

-(void)serverFetch{
  //server fetch
}

每隔15分钟,我就会使用NSTimer调用此方法,

[NSTimer scheduledTimerWithTimeInterval:900.0f repeats:YES block:^(NSTimer * _Nonnull timer) {


    [self fetchFromServer];


}];

我在我的应用程序中使用APNS,所以当我们收到通知时,我再次调用此方法。 因此,调度程序线程和此通知线程不应并行发生。例如,当调度程序线程正在运行并且推送通知到达时,推送通知线程应该等待调度程序线程。我如何实现这一点?是否有任何帮助表示赞赏?

1 个答案:

答案 0 :(得分:0)

一种方法是使用Grand Central Dispatch(GCD)。创建串行队列并向其添加块以便在计时器触发或通知到达时进行异步执行,这些块将严格依次执行。只有当每个块执行的工作完全同步时,即当块返回其所有工作完成时,这才会正常工作。

如果你的块包含异步工作,那么你还需要一个信号量。块应该在开始执行时获取信号量,并且它的最终异步操作应该释放它。这样,虽然串行队列调度的块返回并且队列开始下一个块,下一个块将立即阻塞等待获取信号量,直到前一个块的最后一个异步操作释放它为止。

如果在学习GCD,设计解决方案并实施它之后,您就会遇到问题,提出新问题,显示您编写的代码并解释问题。毫无疑问,有人会帮助你前进。

HTH