performSelector:onThread使runloop退出

时间:2018-06-13 00:42:32

标签: runloop

enter image description here performSelector:onThread使runloop退出? 我尝试观察runloop,当我触摸时,runloop在完成句柄后退出performSelector:onThread,计时器停止工作。我不明白

1 个答案:

答案 0 :(得分:1)

来自documentation for -runMode:beforeDate:

  

运行循环一次 [...]

(强调补充)

也就是说,此方法不会“循环”运行循环。它只是阻塞一次等待一个输入源触发。当这样的输入源触发时,该方法返回。

  

返回值

     

如果运行循环运行并处理输入源或者如果运行循环,则为“是”   已达到指定的超时值[...]

同样,该方法在“运行循环运行并处理 输入源或达到指定的超时值时返回”(强调添加)。

  

[此方法]在处理完第一个输入源或达到limitDate后返回。

-performSelector:onThread:...是作为运行循环源实现的,但这是一个实现细节。通常,除非您在自定义模式下运行运行循环,否则您不能仅依赖于在运行循环中调度的应用程序的输入源。框架可以在其上安排自己的源。所以,你必须为该方法做好准备才能返回。

因此,您必须循环调用-runMode:beforeDate:,直到出现适合您目的的某些条件,或者您需要为计时器和运行循环时使用自定义模式。但是,在后一种情况下,您需要为该模式安排自己的输入源,因为只有定时器不足以使运行循环继续运行。