-1

在此处输入图像描述 performSelector:onThread 使运行循环退出?我尝试观察运行循环,当我触摸时,运行循环在完成句柄 performSelector:onThread 后退出,计时器停止工作。我无法理解

4

1 回答 1

1

文档中-runMode:beforeDate:

运行一次循环[…]

(重点补充)

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

返回值

如果运行循环运行并处理输入源或达到指定的超时值,则为 YES […]

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

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

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

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

于 2018-06-13T02:51:02.263 回答