iOS - 是否可以暂停执行,允许主循环运行,然后恢复执行?

时间:2014-02-27 10:06:35

标签: ios cocoa

在iOS应用中可以执行以下操作:

  • 暂停执行主线程上运行的方法。
  • 允许主线程继续,完成主循环的一个循环(或持续指定的时间段)
  • 继续执行上一个暂停的方法 ?

我已经搜索过,找不到任何可以让我这样做的东西,但我有一种感觉,我以前见过的是我以前合作过的程序员。

这样做的动机如下:

  • 我正在编写一个消息路由类的测试
  • 测试(a)发送消息然后(b)分析结果以确定测试是否通过
  • 使用performSelectorOnMainThread发送消息:withObject:waitUntilDone:NO

我有两种方法可以解决这个问题:

  1. 拆分我的测试并使用performSelector:withObject:afterDelay:
  2. 发送消息时为waitUntilDone指定YES
  3. 这两种解决方案都可以,但是1.使测试变得非常复杂,并且2.更改了我正在编写测试的消息系统,因此必须仔细考虑。

    考虑什么是performSelectorOnMainThread:withObject:waitUntilDone:是的,似乎我要求的功能应该是可能的(因为它在很多方面类似),但它可能吗?

2 个答案:

答案 0 :(得分:4)

这可能就是你要找的东西:

[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate date]];

这将执行主运行循环的一次迭代,然后从那里继续。这有点滥用运行循环应该工作的方式,所以你可能想要考虑一个不同的设计 - 暂停主线程几乎不是一个好主意。也许在单独的线程中做你需要做的事情,让线程在完成时回调委托方法,或者使用通知。

答案 1 :(得分:0)

为此目的使用多线程。主线程上的SENDER,第二个线程上的WATCHER,允许您在发送之前开始观看的内容。