草庐IT

dispatchQueue

全部标签

ios - 如何在 Swift 中退出 "DispatchQueue.main.asyncAfter"

我想在调用deinit时退出“DispatchQueue.main.asyncAfter”。subView.swiftDispatchQueue.main.asyncAfter(deadline:.now()+5.0){self.doSomething()}funcdoSomething(){ifself.subView.flgA==false{//errorbecausesubView'sdeinitisalreadycalled//...}}当ViewController执行_=self.navigationController?.popViewController(animate

ios - 在 Alamofire 请求后,我是否需要 DispatchQueue.main 来更新 UI?

我正在学习有关使用REST/web请求的教程。在本教程中,我们正在开发一个Pokedex应用程序,在该应用程序中,我们使用Alamofire从API中获取Pokemon详细信息,然后在我们的UI中显示该数据。相关代码如下:typealiasDownloadComplete=(Bool)->()//ModelclassfuncdownloadPokemonDetails(completed:@escapingDownloadComplete){Alamofire.request(_pokemonURL).responseJSON{(response)invarsuccess=trueif

ios - 为什么我的代码只能在 DispatchQueue.main.async block 内运行?

这个问题在这里已经有了答案:CodeonlyworkswithinaDispatchQueue.main.asyncblock,why?(1个回答)关闭6年前。我编写这段代码是为了在用户开始编辑UITextField时选择所有文本:@IBActionfunconEditingBegin(_sender:Any){print("editingbegan")lettextfield=senderas!UITextFieldtextfield.selectAll(nil)}但它不会工作,直到我将textfield.selectAll(nil)行包含在DispatchQueue.main.as

ios - DispatchQueue.global(qos : . default) 在后台或锁屏时继续,如何暂停?

Swift新手:将Objective-CAppleHealth集成代码移植到Flutter/Dart调用的Swift。当我后台运行或锁定旧版Obj-C应用程序时,它几乎会立即暂停所有执行。但是,在我的Swift代码端口中并没有发生相同的行为,我在Swift中使用与旧版Obj-C应用程序中相同的DispatchQueue,之所以暂停很重要,是因为一旦用户锁定iPhone屏幕,AppleHealth就会加密其所有数据,并且它不可用。我的理解也是正确的,当您暂停DispatchQueue时,当前正在执行的block将完成,但后续block将不会开始执行。据我所知,Swift代码移植模仿了Ob

swift - RunLoop 与 DispatchQueue 作为调度器

使用新的Combine框架时,您可以指定从发布者接收元素的调度程序。RunLoop.main和DispatchQueue.main在这种情况下将发布者分配给UI元素时有很大区别吗?第一个返回主线程的运行循环和与主线程关联的第二个队列。 最佳答案 使用RunLoop.main作为Scheduler和使用DispatchQueue.main作为Scheduler:RunLoop.main仅当主运行循环以.default模式运行时才运行回调,这不是跟踪触摸和鼠标事件时使用的模式。如果您使用RunLoop.main作为Scheduler,当

ios - 如何判断一条语句是否需要放在DispatchQueue.main.async中?

我正在尝试在viewDidLoad中获取subview的绑定(bind)大小:(canvas.bounds)最初我没有使用DispatchQueue.main.async包装器,并且没有正确返回大小。所以通过实验,我将语句包装在主线程队列中。然后它起作用了。我知道有一个指南说“UI相关操作需要放在主线程”。但这如何转化为实际的编码经验法则:如果我只是查询一个UI属性,比如获取边界大小,我是否需要将它包装在主线程队列中吗?如果我要更改UI属性(property),例如改变边界大小,我需要把它包在里面吗主线程队列?(我想可能是的)overridefuncviewDidLoad(){supe

swift - 创建 DispatchQueue Swift3 的方法有什么不同

我是Swift菜鸟,有这样的误解创建调度队列有什么区别示例1letbackgroundQueue=DispatchQueue(label:"com.app.queue",qos:.background,target:nil)backgroundQueue.async{print("Dispatchedtobackgroundqueue")}示例2letbackgroundQueue=DispatchQueue.global()backgroundQueue.async{print("Dispatchedtobackgroundqueue")}据我了解,这两种方法的作用相同或者例如这种方

ios - 线程池 : DispatchQueue. main.async

我从事过Java工作,并且非常清楚线程和线程池的工作原理。我想知道是否有人可以解释如何在swift中创建线程和在线程池中分配空间?还有,是吗Dispatch.main.async{//somecode}创建新线程还是异步执行任务?提前致谢=) 最佳答案 队列和线程是不同的概念。队列是要执行的block的有序(有时是优先级)序列。作为(主要)实现细节,block必须被安排到线程上才能执行,但这不是它们的重点。所以Dispatch.main.async分派(dispatch)(追加)一个block到主队列。主队列是串行的并且有些特殊,因

ios - 如何在使用 DispatchQueue 时停止从主线程快速执行正在运行的后台线程

DispatchQueue.global(qos:.background).async{//Thiswillrunonthebackgroundqueueself.writeValue(tag:GlobalData.WRITE_DATA,data:getDataForWrite(1))self.writeValue(tag:GlobalData.WRITE_DATA,data:getDataForWrite(2))self.writeValue(tag:GlobalData.WRITE_DATA,data:getDataForWrite(3))self.writeValue(tag:G

swift - 在尝试使用主线程时不明确使用 DispatchQueue

这是一个奇怪的问题,我似乎找不到任何帮助。在Swift3上,尝试调用主线程我尝试使用DispatchQueue.main.async,但它无法编译。任何想法都会有所帮助。 最佳答案 试试这段代码,这是Swift3.0语法:DispatchQueue.main.async(execute:{()->Voidin})对于Swift4.x,您还可以使用:DispatchQueue.main.async{} 关于swift-在尝试使用主线程时不明确使用DispatchQueue,我们在Stack