gpt4 book ai didi

ios - 如何在全局函数中使用 AppDelegate 快速在主线程上执行选择器?

转载 作者:行者123 更新时间:2023-11-28 15:04:46 24 4
gpt4 key购买 nike

如果可能的话,我希望 AppDelegate 执行选择器,这是我的代码:

func RunLoopSourceScheduleRoutine(info:UnsafeMutableRawPointer?,r1:CFRunLoop?,mode:CFRunLoopMode?)->Void{

let obj : RunLoopSource = Unmanaged<RunLoopSource>.fromOpaque(info!).takeUnretainedValue()
let theContext = RunLoopContext.init(initWithSource: obj, andLoop: r1!)

let del = UIApplication.shared.delegate

del.performSelector(onMainThread: #selector(removeSource), with: theContext, waitUntilDone: false)

}

我试过这个:(应用程序崩溃)

 AppDelegate.performSelector(onMainThread: #selector(removeSource), with: theContext, waitUntilDone: false)

如何从全局函数在主线程上执行选择器?

最佳答案

performSelectorOnMainThread:withObject:waitUntilDone: 使用常见的运行循环模式对消息进行排队。根据 Apple 的“并发编程指南”,主队列会将排队的任务与应用程序运行循环中的其他事件交织在一起。因此,如果事件队列中还有其他事件要处理,则调度队列中排队的 block 可能会先运行,即使它们是稍后提交的。

要解决此问题,您可以使用 dispatchQueue,如下所示:

DispatchQueue.main.async {
UIApplication.shared.delegate.removeSource()
}

您可以在以下链接中阅读更多相关信息: https://blackpixel.com/writing/2013/11/performselectoronmainthread-vs-dispatch-async.html

关于ios - 如何在全局函数中使用 AppDelegate 快速在主线程上执行选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48642459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com