大家好,欢迎来到IT知识分享网。
正常情况下,使用该函数进行延迟执行是可以正常直接Selector的方法的,但是当我们建立一个子线程,在子线程调用该方法的时候就会出现无法正常调用的问题。
查看该方法的Discussion,可知在使用这个延时函数的时候,会在内部创建一个NSTimer,然后添加到该线程的Runloop里面,如果当前线程没有开启Runloop,这个方法就会进行等待,直到启动Runloop才会执行。
解决方案,把该线程的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