首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我应该选择GCD而非NSOperation并阻止高级应用程序?

在回答这个问题之前,我们先了解一下GCD和NSOperation这两个概念。

GCD(Grand Central Dispatch)是苹果公司推出的一种多核编程技术,它可以让开发者更轻松地实现多线程编程。GCD通过队列(DispatchQueue)来管理并发任务,可以实现异步执行、同步执行等多种任务调度策略。

NSOperation是苹果公司推出的一种面向对象的并发编程框架,它可以让开发者更方便地管理并发任务。NSOperation通过NSOperationQueue来管理并发任务,可以实现依赖关系、取消任务等高级功能。

现在我们来回答为什么应该选择GCD而非NSOperation并阻止高级应用程序的问题。

首先,GCD相比于NSOperation,更加轻量级,更易于使用,同时也更加灵活。GCD提供了一套简单易用的API,可以让开发者快速地实现多线程编程,而无需深入了解复杂的并发编程概念。

其次,GCD支持异步执行和同步执行,可以根据需要灵活地调整任务的执行方式。同时,GCD还支持任务依赖关系和取消任务等高级功能,可以满足复杂应用程序的需求。

最后,GCD与苹果公司的其他技术栈(如Swift、iOS、macOS等)紧密集成,可以更好地支持苹果生态系统的开发者。

综上所述,如果您需要实现高性能的多线程编程,并且希望使用简单易用的API,那么GCD是一个非常好的选择。当然,如果您需要实现更加复杂的并发编程,或者需要使用NSOperation提供的高级功能,那么NSOperation也是一个不错的选择。但是,对于大多数应用程序来说,GCD已经足够强大,可以满足绝大多数的并发编程需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS多线程NSThread,NSOperationGCD详解

此文章已在的论坛首发,论坛地址: http://blog.csdn.net/shenjie12345678/article/details/51819493 线程是特别有用的,当你需要执行一个特别耗时的任务...特别是,你可以使用线程来避免阻塞应用程序的主线程去处理用户界面的事件和有关的行动的功能。线程还可以用于将大型的工作划分成几个较小的部分,从而去提高设备的性能。...任务 有两种执行方式: 1.同步操作(sync),它会阻塞当前线程的操作等待Block中的任务执行完毕,然后当前线程才会继续往下执行。...运行效果如下: 示例代码如下: 最后总结一下: 更新UI应该在主线程(UI线程)中进行. NSThread适合轻量级多线程开发,控制线程顺序比较难,同时线程总数无法控制....NSOperation是对GCD面向对象的ObjC封装,但是相比GCD基于C语言开发,效率却更高,建议如果任务之间有依赖关系或者想要监听任务完成状态的情况下优先选择NSOperation否则使用GCD.

77220

老司机读书笔记——Effective Objective-C 2.0阅读笔记

---- 5.在-dealloc中只释放引用解除监听 在-dealloc方法里,应该做的事情就是释放指向其他对象的引用,取消原来订阅的“键值观测”(KVO)或NSNotificationCenter...这样依赖,执行for循环时,应用程序所占内存量就会持续上涨,而等到所有临时对象都释放后,内存用量又会突然下降。 然而在循环中合理的位置添加自动释放池,应用程序在执行循环时的内存峰值就会降低。...如果想要添加延时任务,条件允许的情况下应尽可能选择GCD。 ---- 9.合理使用GCDNSOperation GCD为纯C的API,而NSOperation则是OC对象。...与NSOperation比起来GCD更加轻量,然而NSOperation却有以下几点在使用上更加便捷: 取消操作 指定依赖关系 提供KVO监听 指定优先级 重用对象 ---- 10.多用Block枚举,...+load与+initialize方法都应该实现的精简一些,这有助于保持应用程序的响应能力,也能减少引入“依赖环”的几率。 无法在编译器设定的全局常量,可以放在+initialize方法里初始化。

46520
  • iOS多线程之GCD、OperationQueue 对比和实践记录

    GCD 负责创建所需的线程,安排任务在这些线程上运行。由于线程管理现在是系统的一部分,GCD 提供了任务管理和执行的整体方法,比传统线程提供了更高的效率。...NSOperation 是基于 GCD 做的面向对象的封装。相比较 GCD 使用更加简单,并且提供了一些用 GCD 不是很好实现的功能。是苹果公司推荐使用的并发技术。...NSOperationQueue OperationQueue也是对 GCD高级封装,更加面向对象,可以实现 GCD 不方便实现的一些效果。被添加到队列的操作默认是异步执行的。...更常见的做法是取消所有队列操作,以响应某些重要事件,如应用程序退出或用户专门请求取消,而不是有选择地取消操作。...当然,您创建的操作对象的数量以及在每个操作对象中执行的工作量是可变的,并且完全取决于您的应用程序。你应该经常使用像 Instruments 这样的工具来帮助你在效率和速度之间找到一个适当的平衡。

    1.5K40

    面试iOS 机会在自己手中

    在项目什么时候选择使用GCD,什么时候选择NSOperation 答: 项目中使用NSOperation的优点是NSOperation是对线程的高度抽象,在项目中使用它,会使项目的程序结构更好,子类化NSOperation...NSOperation 相比于 GCD 有哪些优势?** GCD是基于c的底层api,NSOperation属于object-c类。...ios 首先引入的是NSOperation,IOS4之后引入了GCD和NSOperationQueue并且其内部是用gcd实现的。...相对于GCD: 1、NSOperation拥有更多的函数可用,具体查看api。 2、在NSOperationQueue中,可以建立各个NSOperation之间的依赖关系。...从个人使用的感觉来看,比较合适的用法是:除了依赖关系尽量使用GCD,因为苹果专门为GCD做了性能上面的优化。 17. 如何访问修改一个类的私有属性?

    54151

    多线程之NSOperation小结

    一、NSOperation 抽象类 NSOperation 是一个"抽象类",不能直接使用。抽象类的用处是定义子类共有的属性和方法。 NSOperation 是基于 GCD 做的面向对象的封装。...三、NSOperationGCD的区别: GCD 将任务(block)添加到队列(串行/并发/主队列),并且指定任务执行的函数(同步/异步) GCD是底层的C语言构成的API iOS 4.0 推出的...OC 框架,更加面向对象,是对 GCD 的封装。 iOS 2.0 推出的,苹果推出 GCD 之后,对 NSOperation 的底层全部重写。...Operation作为一个对象,为我们提供了更多的选择。...可以跨队列设置操作的依赖关系 可以设置队列中每一个操作的优先级 高级功能: 最大操作并发数(GCD不好做) 继续/暂停/全部取消 跨队列设置操作的依赖关系 四、代码实践 1 // 2 // ViewController.m

    45920

    阿里、字节:一套高效的iOS面试题( 多线程 GCD底层原理篇)

    是不是跟死锁的机制一模一样:在等着你,而你也在等着。 没错!!!这里就是死锁,不过新版 GCD 加入了死锁检测机制,如果发生死锁,则会引发 crash。...至于 GCD源码吐血分析(2) 里说的 可以绕开 crash 来引发死锁,想我可能做到了。。。...操作依赖 dependencies 当需要以特定顺序执行 NSOperation 时,依赖 是一个方便的选择。...> 执行任务的主流程应该周期性地检查 `cancelled` 属性。如果返回 YES,`NSOperation` 应该尽快清理退出。...此时,NSOperationQueue 只是调用 GCD 来异步执行它。 对于操作队列中 ready 为 YES 的 NSOperation,操作队列将选择 queuePriority 最大的执行。

    4.5K50

    多线程-NSOperation和NSOperationQueue

    NSOperation NSOperation类是用来封装在单个任务相关的代码和数据的抽象类。NSOperation 是苹果公司对 GCD 的封装,完全面向对象,所以使用起来更好理解。...** 因为它是用来封装任务的,大家可以看到 NSOperation 和 NSOperationQueue 分别对应 GCD 的 任务 和 队列, 但是NSOperation本身又有执行多线程的能力跟GCD...不应该直接调用start方法(如果直接start则会在主线程中调用)而是应该放到NSOperationQueue中启动。...自定义 Operation 需要继承 NSOperation 类,实现其 main() 方法,因为在调用 start() 方法的时候,内部会调用 main() 方法完成相关逻辑。...的队列 相比较就会发现,这里没有串行队列,那如果想要10个任务在其他线程串行的执行的话,NSOperationQueue 有一个参数 maxConcurrentOperationCount 最大并发数

    1.1K30

    iOS多线程——你要知道的NSOperation都在这里你要知道的iOS多线程NSThread、GCDNSOperation、RunLoop都在这里

    封装更完善的GCDGCD提供了极其便捷的方法来编写多线程程序,可以自动实现多核的真正并行计算,自动管理线程的生命周期,好处不言而喻,但可定制性就有点不足了,Foundation框架提供了NSOperation...,自动管理线程的生命周期,如果是并发的情况,其底层也使用线程池模型来管理,基本上可以说这两个类提供的功能覆盖了GCD,并且提供了更多可定制的开发方式,开发者可以按需选择。...NSOperation “任务的封装” 和GCD类似,GCD向队列提交任务,NSOperation就是对任务进行的封装,封装好的任务交给不同的NSOperationQueue即可进行串行队列的执行或并发队列的执行...,之所以选择使用自定义子类,正是因为自定义子类可以提供更多定制化的方法,而不仅仅局限于一个block或一个方法,接下来将讲解具体的自定义实现方法。...并发的NSOperation自定义子类 关于并发的NSOperation自定义子类就比较复杂了,但可以提供更高的可定制性,这也是为什么SDWebImage使用自定义子类来实现下载任务。

    1.6K51

    iOS 多线程 - Operation

    前言 Hi Coder,是 CoderStar!...其实 NSOpertion 是先于GCD引进的,在当时,NSOperationQueue 接收 NSOperation 对象创建一个线程,然后在该线程上运行 main方法 ,运行完成之后再杀死该线程。...64 这个值在 GCD应该也是默认最大线程数,但是可以调整目标队列的优先级进行调整。这里涉及到一个线程爆炸的概念,后面可能还会出一篇文章写这些东西。...关于isAsynchronous属性,刚开始以为其可以控制Operation是否自动开辟线程,但是根据实验以及查看源码之后,发现其应该只是一个标识当前Operation是否是异步操作的一个标志而已,当设置为...(Operation 在使用 GCD API 的基础上还会加上一些锁用来保证线程安全) 但是反过来说因为 Operation 是更高层次的抽象,按照一般的经验法则来看,我们应首先使用最高级别的 API,

    96530

    iOS学习——(转)多线程

    转载自:iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用 一、多线程的基本概念 进程:可以理解成一个运行中的应用程序,是系统进行资源分配和调度的基本单位...Block追加到指定的Dispatch Queue中,等到全部的处理执行结束。...控制线程数量:GCD 不像 NSOperation 那样有直接提供线程数量控制方法,但是通过 GCD 的 semaphore 功能一样可以达到控制线程数量的效果。...的理解与使用 No.1:NSOperation简介   NSOperation是基于GCD之上的更高一层封装,NSOperation需要配合NSOperationQueue来实现多线程。...No.2:NSOperation的三种创建方式 NSInvocationOperation的使用:创建NSInvocationOperation对象关联方法,之后start。

    1.2K20

    推荐:多线程的实现方式及经典示例

    下面就给大家系统的介绍一下 GCD 是如何实现多线程的 GCD 实现多线程 GCD 简介 GCD 全称是Grand Central Dispatch,可译为“超级厉害的中枢调度器”,GCD 是苹果公司为多核的并行运算提出的解决方案...先进入的任务先完成结束,再执行后面的任务。...你等我,等你,谁也无法执行。...static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ // 一次性代码 }); 作用:实现某个类的单粒对象 单例模式:在整个应用程序中...就该讲讲 NSOperation,它是 GCD 的面向对象的封装,使用起来也更方便, NSOperation实现多线程 NSOperation是个抽象类,并不具备封装操作的能力,必须使用它的子类 NSInvocationOperation

    1.2K160

    iOS-多线程详解

    进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 2.线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程,称为主线程...安全隐患解决 我们可以看出,当线程A访问数据对数据进行操作的时候,数据被加上一把锁,这个时候其他线程都无法访问数据,知道线程A结束返回数据,线程B此时在访问数据修改,就不会造成数据错乱了。...currentThread]); } }); //栅栏函数 dispatch_barrier_async(queue, ^{ NSLog(@"是一个栅栏函数...NSOperation的使用(重点) NSOperation 是苹果公司对 GCD 的封装,完全面向对象,GCD多了一些更简单实用的功能,所以使用起来更加方便易于理解。...NSOperation 和NSOperationQueue 分别对应 GCD 的 任务 和 队列。

    2.1K90

    iOS基础问答面试题连载(三)-附答案

    16.请简单对比下GCDNSOperation两种多线程的实现方案? 17.请按照自己的理解,说一说在进行多线程编程的时候相对于GCD而言,操作队列有哪些优势?...PThread NSThread GCD NSOperation 4.请简单说明主线程的作用,以及使用注意点?...全局并发队列在整个应用程序中本身是默认存在的并且对应有高优先级、默认优先级、低优先级和后台优先级一共四个并发队列,我们只是选择其中的一个直接拿来用。...b.保存一份到磁盘缓存中 c.设置显示图片 16.请简单对比下GCDNSOperation两种多线程的实现方案?...后台会话不同于常规的,普通的会话,它甚至可以在应用程序挂起,退出,崩溃的情况下运行上传和下载任务。

    84550

    2018最新最全BAT 全套高级iOS面试题以及面试资料强势来袭

    (知道多少说多少) 3,有哪些场景是NSOperationGCD更容易实现的?(或是NSOperation优于GCD的几点,知道多少说多少) 4,App 启动优化策略?...你认为理想的无痕埋点系统应该具备哪些特点?(知道多少说多少) 6,你知道有哪些情况会导致app崩溃,分别可以用什么方法拦截化解?...3,排序题:冒泡排序,选择排序,插入排序,快速排序(二路,三路)能写出那些? 4,链表题:如何检测链表中是否有环?如何删除链表中等于某个值的所有节点?...而其中 高级开发 的部分应该作为优先考核的内容,目的在于首先要验证面试者 是否具备高级开发必备的基本素质 。这部分知识的掌握程度会直接影响一个开发者的研究和设计能力,包括横向和纵向的。...而崩溃非常影响用户体验,所以笔者认为一名高级 iOS 开发应该具备避免这些崩溃的能力,起码至少也要知道这些容易导致崩溃的场景。

    1.7K20

    出一套 iOS 高级面试题

    (知道多少说多少) 有哪些场景是NSOperationGCD更容易实现的?(或是NSOperation优于GCD的几点,知道多少说多少) App 启动优化策略?...你认为理想的无痕埋点系统应该具备哪些特点?(知道多少说多少) 你知道有哪些情况会导致app崩溃,分别可以用什么方法拦截化解?...而其中高级开发的部分应该作为优先考核的内容,目的在于首先要验证面试者是否具备高级开发必备的基本素质。这部分知识的掌握程度会直接影响一个开发者的研究和设计能力,包括横向和纵向的。...这道题看到网上有些答案是错的,说的大概的意思是“同一时刻只有一个线程访问”。但是如果按照这个定义的话,那么那些无法改变的常量就不算是线程安全的了,所以显然这类定义就是错的。...而崩溃非常影响用户体验,所以笔者认为一名高级 iOS 开发应该具备避免这些崩溃的能力,起码至少也要知道这些容易导致崩溃的场景。

    1.6K21

    iOS 从实际出发理解多线程

    这个“事”你可以选择同步或者而是异步执行,这就衍生出了东西也就契合线程上面的同步线程和异步线程。 同步任务:不需要开启新的线程,在当前线程执行就可以。...首先得知道NSOperation是基于GCD封装的,NSOperation这个类本身我们使用的时候不躲,更多的是集中在苹果帮我们封装好的NSInvocationOperation和NSBlockOperation...      你command一下NSOperation进去看看,有几个点你还是的了解一下的,主要的就是下面的几个方法: NSOperation * operation = [[NSOperation...image.png       关于NSOperation的我们就说这么多,下面重点说一下GCD。...那系统到底是怎么处理的,我们也说说,下面的是高级编程书里面的解释我们梳理一下给出结论。

    77171

    自学iOS开发,从新手小白到高级工程师正确的打开方式

    由于是自学(而且全院貌似就一个人在学),深知自学之痛。所以在此分享一下的学习路程,希望可以帮到大家。...个人以为,从iOS开发小白到iOS开发高级工程师,可以分成以下四个阶段: 1.熟悉语言语法阶段(小白) iOS开发主要有两种语言:Objective-C和swift。...例如OC中的UITableView的dataSource和delegate;GCD或者NSOperation开辟线程执行任务的相关方法;NSDictionary、NSArray相关的增删查改方法;JSON...3.了解iOS开发的底层原理,熟练运用(初级、中级工程师) 所谓的iOS基础,面试也经常问到的:iOS内存管理(ARC&MRC)、iOS运行时机制(RunTime)、RunLoop、多线程(GCD&NSOperation...4.能够熟练写一些框架,对iOS开发有自己的真知灼见(高级工程师) 因为个人比较菜,对这个阶段理解也比较浅。如果有什么错误的地方,还请大神纠正。

    1.8K80

    读书笔记

    我们在选择前缀时,应该是三个字母的; 3.2 提供“全能初始化方法” 在类中提供现代战争全能初始化方法,并于文档里指明。...从而使该对象变为僵尸对象; 僵尸类能够响应所有的选择子,响应方式为:打印一条包含消息内容及其接收者的消息,然后终止应用程序; 5.8 不要使用 retainCount 对象的保留计数看似有用,实则不然...performSelector 系列方法,而是应该把任务封装到块里,然后调用GCD的相关方法来实现; 6.7 掌握 GCD 及操作队列的使用时机 在解决多线程与任务管理问题时,派发队列并非唯一实现方案...并不一定是最佳方式,还有一种技术叫 NSOperationQueue,它虽然与 GCD 不同,但是却与之相关,开发者可以把操作以 NSOperation子类的形式放在队列中,而这些操作也能够并发执行;...使用 NSOperation 和 NSOperationQueue的好外: 取消某个操作,如果使用操作队列,则想要取消操作是很容易的,只需要调用 cancel 就可以了;若使用 GCD 则没有办法取消;

    48720
    领券