dispatch_queue_t queue=dispatch_queue_create("luoliping", DISPATCH_QUEUE_SERIAL); dispatch_async(queue, ^{ NSLog(@"%@",[NSThread currentThread]); }); dispatch_suspend(queue); dispatch_resume(queue); dispatch_async(queue, ^{ NSLog(@"%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"%@",[NSThread currentThread]); }); dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSLog(@"2-%d",[NSThread isMainThread]); dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"2-%d",[NSThread isMainThread]); //刷新表 [_tableView reloadData]; }); });
NSOperation和GCD的区别
- NSTread:oc语言,面向对象,简单易用,可直接操作线程对象 ,线程生命周期由程序员管理
- GCD的使用更轻量级,充分利用设备的多核,线程生命周期自动管理
- 而NSOperation作为对象提供了更丰富的API,在NSOperationQueue中,可以随时取消要准备执行的任务,能够设置NSOperation的priority(优先级),使之按顺序执行
- GCD只支持FIFO的队列,NSOperationQueue可以很方便的调整执行顺序,可以添加依赖设置最大并发数量。
- KVO能应用在NSOperation中,以监听一个Operation是否完成或取消,这样能比GCD更加有效地掌控我们执行的后台任务
- NSOperation通过继承,可以提高代码的复用度,这比GCD更有自由度和扩展性
- NSOperationQueue支持KVO,可以检测Operation是否正在执行,是否结束,是否取消。
任务之间不太相互依赖,选用GCD;
任务之间有依赖,或者要监听任务的执行情况:NSOperationQueue
gcd面试向
写的挺好的