【问题标题】:performSelector:onThread make runloop exitedperformSelector:onThread 使 runloop 退出
【发布时间】:2018-06-13 00:42:31
【问题描述】:

enter image description here performSelector:onThread 使运行循环退出? 我尝试观察运行循环,当我触摸时,运行循环在完成句柄 performSelector:onThread 后退出,计时器停止工作。看不懂

【问题讨论】:

  • don't post your code as an image。使用 Markdown 中的代码格式将代码嵌入到问题本身中。就像粘贴、突出显示并按下{ } 按钮一样简单。

标签: runloop


【解决方案1】:

来自documentation for -runMode:beforeDate:

运行循环一次 […]

(已添加重点)

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

返回值

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多