GCD是基于c的底层api,NSOperation属于object-c类。相对于GCD :
1,NSOperation拥有更多的函数可用,具体查看api。
2,在NSOperationQueue中,可以建立各个NSOperation之间的依赖关系。
3,有kvo,可以监测operation是否正在执行(isExecuted)、是否结束(isFinished),是否取消(isCanceld)。
4,NSOperationQueue可以方便的管理并发、NSOperation之间的优先级。
5,GCD主要与block结合使用。
/ /**< 自定义queue,默认串行: NULL == DISPATCH_QUEUE_SERIAL*/
/**< label:标签,用于标注queue*/
dispatch_queue_t queue = dispatch_queue_create("label", NULL);
dispatch_async(queue, ^{
NSLog(@"test");
});
/**< 自定义queue,并行或串行: DISPATCH_QUEUE_CONCURRENT或DISPATCH_QUEUE_SERIAL*/
dispatch_queue_t serial_queue = dispatch_queue_create("标签", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(serial_queue, ^(){
sleep(5);
NSLog(@"block_1"); // 尽管为异步调用且延迟3秒,但如果在serial队列中,block_1仍然先于block_2被打印出来
});
dispatch_async(serial_queue, ^(){
NSLog(@"block_2");
});
/**< 延迟执行*/
/**< (int64_t)(delayInSeconds * NSEC_PER_SEC):转换成毫秒*/
double delayInSeconds = 5.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
NSLog(@"5s delay");
});
/**< 常用的异步并发执行*/
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT , 0), ^{
sleep(5);
NSLog(@"block_1");
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT , 0), ^{
NSLog(@"block_2");
});
/**< 异步并回调主线程,常用ui更新*/
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT , 0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"to do with ui");
});
});
相关推荐
NSOperation和NSOperationQueue:其实出现得比GCD更早,但是GCD出现以后苹果在GCD的基础上对NSOperation进行了重写,使其对象化,符合了大众开发者的习惯。作为更高层的技术,NSOperation在处理依赖关系、控制各种...
本教程将深入探讨Swift中的三种主要多线程技术:NSThread、GCD(Grand Central Dispatch)以及NSOperation。这三者都有其独特的优势和适用场景,了解并熟练掌握它们能让你的iOS应用更加高效和流畅。 首先,我们来看...
NSOperation是Apple提供的一个高级多线程框架,它基于GCD(Grand Central Dispatch)并提供了更强大的功能和灵活性。本篇文章将深入探讨iOS多线程中的NSOperation及其相关知识点。 一、NSOperation简介 NSOperation...
本教程将重点讲解三种多线程技术:NSThread、NSOperation和GCD(Grand Central Dispatch),以及如何用它们来实现图片的异步加载。 首先,我们来看`NSThread`。`NSThread`是Apple提供的轻量级线程管理类,允许...
`NSOperation`类是一个抽象基类,它扩展了GCD(Grand Central Dispatch)的队列模型,添加了更多的控制功能和状态管理。相比于直接使用GCD,`NSOperation`提供了更丰富的功能,如依赖关系设置、取消操作、操作的状态...
本文将深入探讨iOS并发编程的几个核心概念:GCD(Grand Central Dispatch)、NSOperation和NSOperationQueue,帮助开发者理解并掌握这些技术。 首先,让我们来了解GCD。GCD是Apple为多核处理器设计的一种异步编程...
NSOperation是基于GCD(Grand Central Dispatch)的一个抽象层,它允许开发者以更面向对象的方式处理并发任务。在这个“NSOperation例子”中,我们可能看到如何使用NSOperation来组织和管理异步操作。 首先,...
CocoaheadsHBA 同步搜索一个 iOS 演示项目,展示了在输入 UITextField 时进行异步搜索的两种方法。 使用标准的 Grand Central Dispatch 调用和 NSOperations 进行一次实时搜索。 您可以轻松比较并查看它是如何完成的...
### iOS多线程编程技术详解:NSThread、Cocoa NSOperation、GCD #### 一、多线程基本概念 1. **进程**:在移动设备(如iPhone)上,每一个应用程序都可以被视为一个独立的进程。每个进程都会有一个主线程(main ...
不过,NSThread的使用相对复杂,需要手动管理线程的生命周期,因此在大多数情况下,推荐使用GCD或NSOperation。 五、线程安全与锁 在多线程环境中,数据的共享可能会引发竞态条件,导致数据不一致。为了解决这个...
本文将深入探讨iOS中的多线程编程,包括GCD(Grand Central Dispatch)、NSOperation、NSThread的使用,以及异步和同步下载、Block的运用,以及ASIHttpRequest类库的使用。 首先,GCD是Apple推出的一种多线程解决...
这可以通过在NSOperation的`main`方法中启动一个GCD异步队列或使用URLSession来完成。 5. 回调处理:异步操作完成后,可能需要在回调中更新UI或其他操作。这通常通过KVO(Key-Value Observing)或闭包(block)实现...
Grand Centeral Dispatch(GCD) NSOperation和NSOperationQueue 1.NSThread 这是最轻量级的多线程的方法,使用起来最直观的多线程编程方法。但是因为需要自己管理线程的生命周期,线程同步。经常使用NSThread进行...
与直接使用线程或GCD(Grand Central Dispatch)相比,NSOperation更易于管理依赖关系和取消操作。它允许开发者创建自定义的操作类,以封装复杂的任务,如网络请求。NSOperationQueue则负责管理和调度这些操作,可以...
在实际开发中,GCD的使用往往结合其他技术,如NSOperation和NSOperationQueue,它们提供了更高级别的抽象,可以更好地控制任务依赖关系和优先级。GCD是iOS和macOS开发中的强大工具,合理运用能极大地提升应用的性能...
与直接使用GCD(Grand Central Dispatch)相比,NSOperation提供了更丰富的特性,如依赖管理、取消任务、操作优先级等。要使用NSOperation,通常需要将其子类化或者利用NSInvocationOperation和NSBlockOperation。 ...
在iOS开发中,实现多线程的的方式有很多种,常用的有pthread、NSThread、GCD与NSOperation。在实际应用中,多线程技术也有着非常多的使用场景,比如异步的网络请求、异步的图片加载、后台执行复杂任务等等。 在iOS...
iOS提供了多种实现多线程的方式,包括NSThread、GCD(Grand Central Dispatch)以及NSOperation和NSOperationQueue。 NSOperation是苹果提供的一种更加面向对象的多线程解决方案,它比GCD更易于理解和使用,特别是...