enter image description here performSelector:onThread使runloop退出? 我尝试观察runloop,当我触摸时,runloop在完成句柄后退出performSelector:onThread,计时器停止工作。我不明白
答案 0 :(得分:1)
来自documentation for -runMode:beforeDate:
:
运行循环一次 [...]
(强调补充)
也就是说,此方法不会“循环”运行循环。它只是阻塞一次等待一个输入源触发。当这样的输入源触发时,该方法返回。
返回值
如果运行循环运行并处理输入源或者如果运行循环,则为“是” 已达到指定的超时值[...]
同样,该方法在“运行循环运行并处理 输入源或达到指定的超时值时返回”(强调添加)。
[此方法]在处理完第一个输入源或达到limitDate后返回。
-performSelector:onThread:...
是作为运行循环源实现的,但这是一个实现细节。通常,除非您在自定义模式下运行运行循环,否则您不能仅依赖于在运行循环中调度的应用程序的输入源。框架可以在其上安排自己的源。所以,你必须为该方法做好准备才能返回。
因此,您必须循环调用-runMode:beforeDate:
,直到出现适合您目的的某些条件,或者您需要为计时器和运行循环时使用自定义模式。但是,在后一种情况下,您需要为该模式安排自己的输入源,因为只有定时器不足以使运行循环继续运行。