ios - 从 NSTimer 回到主线程

标签 ios objective-c multithreading nstimer

我有一个 NSTimer 定义如下:

[NSTimer scheduledTimerWithTimeInterval:self.speed target:self selector:@selector(displayTextOverTime:) userInfo:nil repeats:YES];

方法 displayTextOverTime 显示一些文本,然后一旦显示最后一段文本,它就会使它的计时器无效并调用另一个方法进行处理(它本身可能需要启动一个 NSTimer 来显示文本)。

有没有标准的方法来做这类事情?

我最初的方法是简单地让 displayTextOverTime 直接调用另一个方法,但这让我在嵌套 NSTimer 的地方出现了一些奇怪的行为(它永远不会死,因为即使它们无效并且不会再次循环,它们也没有“完成”,因为它们内部的计时器仍在运行......或者......什么?),这不是我想要的。有什么方法可以说“调用此方法,但在 NSTimer 之外执行”,就像回到主线程一样?

具体来说,我看到被杀死的计时器比启动的计时器多(我有一个方法可以杀死任何传入的计时器,这样我就可以在它被杀死时进行记录)。

最佳答案

要准确回答您的问题,您可以使用 Grand Central Dispatch 在计时器之外运行一个函数。如果你想运行这个函数:

dispatch_async(dispatch_get_main_queue(), ^{
        (your function or block of code goes here)
    });

这将在您的计时器之外运行该 block 。您可以选择在主线程、全局线程或带有您创建的队列的自定义线程上执行此操作。

关于ios - 从 NSTimer 回到主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20714244/

相关文章:

java - 为什么当字面上调用方法时,java不能使用线程上下文类加载器?

c - C 线程程序的 sched_yield

ios - 如何防止将 Swift 5 中的某些文本大写?

ios - xcode 上架构 x86_64 错误的 undefined symbol

android - 外部 HTML Assets 未被 React Native bundle 在生产构建中以供 Webview 使用

ios - 在 uicollectionview 中延迟加载

iphone - 在for循环中取消NSOperation?

.NET 客户端并发性能

ios - 在 iOS 9 上关闭 viewController 时的延迟

ios - 混合 ARM 和 THUMB 指令