首页 > 代码库 > 深入IOS多线程 GCD(一)
深入IOS多线程 GCD(一)
一,什么是GCD
GCD是异步执行任务的技术之一,一般将应用程序中记述的线程管理用的代码在系统级中实现。开发者只需要定义想执行的任务并追加到适当的dispatch queue中,GCD就能生成必要的线程并计划执行任务。由于线程管理师作为系统的一部分来实现的,因此可统一管理,也可执行任务,这样就比以前的线程更有效率。
也就是说GCD用我们难以置信的非常简单的记述方法,实现了极为复杂的多线程编程,可以说这是一项划时代的技术。下面是使用了GCD源码的例子,虽然稍微抽象,但从中也能感受到GCD的威力
dispatch_async(queue,^{ /* 长时间处理 例如AR用画像识别 例如数据库访问 */ /*长时间处理结束主线程处理结果*/ dispatch_asycn(dispatch_get_main_queue(),^{ /*在主线程更新UI界面*/ }); });
上面的就是在后台线程中执行长时间处理,处理结束使用主线程处理结果
dispatch_async(queue,^{ });
这仅有一行代码就表示让处理在后台线程中执行
dispatch_asycn(dispatch_get_main_queue(),^{ /*在主线程更新UI界面*/ });
这样,仅此一行代码就能够让处理在主线程中执行,另外GCD使用到了block,进一步的简化了应用程序的代码
在导入GCD之前,cocoa框架提供了NSObject类的performSelectorInBackground:withObject实例方法和performSelectorOnMainThread实例方法等简单的多线程编程技术。例如,可以改用performSelector系方法来实现前面的GCD的源码看看
//执行后台线程-(void)launchThreadByNSObject_performSelectorInBackground_withObject{ [self performSelectorInBackground:@selector(doWork) withObject:nil]; }//后台线程方法-(void)doWork{ NSAutoreleasePool *pool=[[NSAutoreleasePool alloc]init]; /*长时间处理*/ //处理结束,主线程更新 [self performSelectorOnMainThread:@selector(doneWork) withObject:nil waitUntilDone:NO]; [pool drain]; }//主线程处理方法-(void)doneWork{ //更新UI界面等操作}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。