iOS:关于self.perfrom(:_, with: afterDelay: )不执行问题

iOS:关于self.perfrom(:_, with: afterDelay: )不执行问题正常情况下,使用该函数进行延迟执行是可以正常直接Selector的方法的,但是当我们建立一个子线程,在子线程调用该方法的时候就会出现无法正常调用的问题。查看该方法的Discussion,可知在使用这个延时函数的时候,会在内部创建一个NSTimer,然后添加到该线程的Runloop里面,如果当前线程

大家好,欢迎来到IT知识分享网。

正常情况下,使用该函数进行延迟执行是可以正常直接Selector的方法的,但是当我们建立一个子线程,在子线程调用该方法的时候就会出现无法正常调用的问题。

查看该方法的Discussion,可知在使用这个延时函数的时候,会在内部创建一个NSTimer,然后添加到该线程的Runloop里面,如果当前线程没有开启Runloop,这个方法就会进行等待,直到启动Runloop才会执行。

iOS:关于self.perfrom(:_, with: afterDelay: )不执行问题

解决方案,把该线程的Runloop启动即可,代码如下:

    override func viewDidLoad() {
        super.viewDidLoad()
        print("1")
        let queue = DispatchQueue(label: "label")
        queue.async {
            self.perform(#selector(self.action), with: nil, afterDelay: 2)
            RunLoop.current.run()
        }
        print("2")
    }

    @objc func action() {
        print("3")
    }

执行打印的顺序为1,2,3。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/27894.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信