从NSTimer回到主线程

时间:2013-12-21 00:56:57

标签: ios objective-c multithreading nstimer

我的NSTimer定义如下:

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

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

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

我最初的方法是让displayTextOverTime直接调用另一个方法,但这让我有一些奇怪的行为,我嵌套NSTimer s(永远不会死,因为即使它们已经失效,不会再循环,它们没有“完成”,因为它们内部的计时器仍然在运行...或......某些东西?),这不是我想要的。有没有办法说“调用这个方法,但是在NSTimer之外”,就像回到主线程一样?

具体来说,我看到更多的计时器被杀死而不是开始(我有一种杀死任何传入计时器的方法,所以我可以记录它被杀死的时候)。

1 个答案:

答案 0 :(得分:3)

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

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

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