grand-central-dispatch
全部标签 我正在开发一款SpriteKit游戏,我需要进行一些多线程处理以维持健康的fps。在更新时,我调用一个函数来创建大量UIBezierPaths并使用C++静态库合并它们。如果我有超过10个形状,帧速率会急剧下降,所以我决定尝试GCD并尝试使用单独的线程来解决这个问题。我把它放在didMoveToView中:queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0);在每一帧调用的函数中,我称之为:dispatch_async(queue,^(void){[selfheavyCalculationsFunc];});对于
所以问题是主题问题-我想摆脱这个非常烦人的警告。有没有办法让它静音?注意:我使用dispatch_get_current_queue()仅用于调试目的。 最佳答案 您可以使用以下代码来抑制警告。#pragmaclangdiagnosticpush#pragmaclangdiagnosticignored"-Wdeprecated-declarations"dispatch_get_current_queue()//yourdeprecatedcallingcode#pragmaclangdiagnosticpop
所以问题是主题问题-我想摆脱这个非常烦人的警告。有没有办法让它静音?注意:我使用dispatch_get_current_queue()仅用于调试目的。 最佳答案 您可以使用以下代码来抑制警告。#pragmaclangdiagnosticpush#pragmaclangdiagnosticignored"-Wdeprecated-declarations"dispatch_get_current_queue()//yourdeprecatedcallingcode#pragmaclangdiagnosticpop
关于thisquestion我想知道关于何时使用NSNotification(在主线程中有观察者)与使用GCD将工作从后台线程分派(dispatch)到主线程,是否有任何普遍接受的逻辑?似乎使用通知观察器设置,您必须记住在View卸载时拆除观察器,但随后您可靠地忽略了通知,因为将作业分派(dispatch)到主线程可能会导致在以下情况下执行blockView已卸载。因此,在我看来,通知应该提供改进的应用程序稳定性。根据我所读的GCD,我假设调度选项提供了更好的性能?更新:我知道通知和调度可以一起愉快地工作,在某些情况下,应该一起使用。我试图找出是否存在应该/不应该使用的特定情况。一个例
关于thisquestion我想知道关于何时使用NSNotification(在主线程中有观察者)与使用GCD将工作从后台线程分派(dispatch)到主线程,是否有任何普遍接受的逻辑?似乎使用通知观察器设置,您必须记住在View卸载时拆除观察器,但随后您可靠地忽略了通知,因为将作业分派(dispatch)到主线程可能会导致在以下情况下执行blockView已卸载。因此,在我看来,通知应该提供改进的应用程序稳定性。根据我所读的GCD,我假设调度选项提供了更好的性能?更新:我知道通知和调度可以一起愉快地工作,在某些情况下,应该一起使用。我试图找出是否存在应该/不应该使用的特定情况。一个例
我在viewDidLoad中有以下代码,它在iOS4.3上运行正常,但在iOS5/5.1上挂起。在iOS5/5.1上,警告对话框显示但无法关闭,UI线程卡住,OK按钮无法点击。dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{dispatch_sync(dispatch_get_main_queue(),^{[self.webviewstringByEvaluatingJavaScriptFromString:@"alert('HELLOWORLD!')"];});});这是一个错
我在viewDidLoad中有以下代码,它在iOS4.3上运行正常,但在iOS5/5.1上挂起。在iOS5/5.1上,警告对话框显示但无法关闭,UI线程卡住,OK按钮无法点击。dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{dispatch_sync(dispatch_get_main_queue(),^{[self.webviewstringByEvaluatingJavaScriptFromString:@"alert('HELLOWORLD!')"];});});这是一个错
我正在使用dispatch_sync执行一个block,并且该block已正确执行。但是这个block是在主线程上执行的。根据Apple文档:Serialqueues(alsoknownasprivatedispatchqueues)executeonetaskatatimeintheorderinwhichtheyareaddedtothequeue.Thecurrentlyexecutingtaskrunsonadistinctthread(whichcanvaryfromtasktotask)thatismanagedbythedispatchqueue.这意味着(或者我的理解)
我正在使用dispatch_sync执行一个block,并且该block已正确执行。但是这个block是在主线程上执行的。根据Apple文档:Serialqueues(alsoknownasprivatedispatchqueues)executeonetaskatatimeintheorderinwhichtheyareaddedtothequeue.Thecurrentlyexecutingtaskrunsonadistinctthread(whichcanvaryfromtasktotask)thatismanagedbythedispatchqueue.这意味着(或者我的理解)
Apple的GrandCentralDispatch(GCD)很棒,但只能在iOS4.0或更高版本上运行。苹果的documentation说,“[A]序列化操作队列不提供与GrandCentralDispatch中的串行调度队列完全相同的行为”(因为队列不是FIFO,但顺序由依赖性和优先级决定)。在支持GCD发布之前的OS版本的同时,如何实现与GCD的串行调度队列相同的效果的正确方法是什么?或者换句话说,在希望支持低于4.0版本的iOS应用程序中处理简单后台处理(执行Web服务请求等)的推荐方法是什么? 最佳答案 这个PseudoS