Le *_*ced 1 scheduler ios game-center
这个问题有一些版本,其中OP说的是"如何在下午5点在我的应用程序中触发方法调用?"
然后人们回答"你怎么知道你的应用程序将在下午5点开放"?这成为另一个问题,原始问题就消失了.
那么请避免这种情况吗?
我只想说我想在5:25:28:50用户打开应用时正好在下午5:25和30秒发出方法调用.
如果不清楚,我的意思是我希望我可以使用的绝对时间是否我的用户在5:25:26:35,5:25:20:13或5:29:49:99打开应用程序.
在SO周围阅读,似乎共识(以及Apple文档推荐)是使用某种形式的mach_absolute_time和dispatch_somethingOrOther.我找不到任何真实的具体例子.
我发现的最接近的是http://www.manpagez.com/man/3/dispatch_walltime/,它给出了这个例子:
Create a milestone on Tuesday, January 19, 2038:
struct timespec ts;
ts.tv_sec = 0x7FFFFFFF;
ts.tv_nsec = 0;
milestone = dispatch_walltime(&ts, 0);
Run Code Online (Sandbox Code Playgroud)
我就像"尤里卡!" 直到我意识到a)我不知道如何进行将2038年1月19日变为0x7FFFFFFF的十六进制转换,b)我不明白timespec结构是如何构造的,以及我如何将小时和分钟添加到其中,以及c)milestone = dispatch_walltime(&ts, 0)在Swift中抛出错误.
有人可以帮忙吗?如果可能,使用5:25 pm和30秒的具体示例?
根据时区和夏令时(根据时区和夏令时创建一个NSDate)(这有点棘手但Stackoverflow上有很多答案).然后
struct timespec ts;
ts.tv_sec = (int64_t) [date timeIntervalSince1970];
ts.tv_nsec = 0;
milestone = dispatch_walltime(&ts, 0);
dispatch_after (dispatch_get_main_queue (), milestone, ^ (...));
Run Code Online (Sandbox Code Playgroud)
即使用户在两者之间调整时钟,也会在您想要的时间调度该块.
只是说:dispatch_after的行为有所不同,具体取决于您创建dispatch_time_t的方式.dispatch_time(DISPATCH_TIME_NOW,delta)返回基于mach_absolute_time的时间.dispatch_wall_time(...)返回一个待机时间.dispatch_after根据给定的时间而表现不同.
| 归档时间: |
|
| 查看次数: |
673 次 |
| 最近记录: |