我认为最好利用时间戳并在时间从现在开始几个小时后发布通知。
多线程不是一个很好的方法来做到这一点,因为基本上你会运行一个循环四个小时吃时钟周期。多亏了操作系统的魔力,这不会吃掉整个核心或任何类似的愚蠢的东西,但是如果允许它运行,它将被连续计算。这将是对资源的巨大浪费,因此是不允许的。GCD 并不是真的适合这种事情。它的目的是允许并发来平滑 UI 交互以及更有效地完成任务,一个 4 小时的循环将是低效的。将并发视为一种工具,用于在加载或更改内容时与表格进行交互。GCD 块在正确使用时使这非常容易。GCD 和其他多线程能力提供了在后台进行计算以及与数据库交互和处理请求的工具,而不会影响用户体验。许多比我聪明得多的人都写了大量关于多线程/多任务是什么以及它有什么好处的文章。在某种程度上发布消息一段时间将是多任务处理的方法,而无需通过 GCD 不断执行块以等待 4 小时的时间段,但是可以这样做。您可以执行一个块,该块监视的时间少于线程生命周期的最大长度,然后当线程执行过度时再次分派它,直到达到所需的时间。这是一种不好的做法。向通知中心发布通知,
您可以发布通知请求以观察时间变化,它会返回其注释,但这需要您的应用程序处于活动状态或在后台。我不能保证操作系统不会杀死您的应用程序,但是如果它在“后台”状态下运行良好且安静且内存占用很小,则其通知中心请求将保持活动状态并按预期运行。