GCD和NSOperation总结

GCD和NSOperation的区别
一、GCD是一种轻量级的方法来实现多线程。控制起来比较麻烦,好比取消和暂停一个线程。
二、NSOperation和NSOperationQueue相对于GCD效率上要低一点,他们是面向对象的方式,从Mac OS X v10.6和iOS4开始,NSOperation底层也是用的GCD来实现的。能够在多个操做中添加附属,也能够重用操做,取消或者暂停。NSOperation和KVO是兼容,也就是说,能够在NSOperation中使用KVO,例如,你能够经过NSNotificationCenter去让一个操做开始执行。ios

三、NSOperation的使用方法
【1】、继承NSOperation类
【2】、重写“main”方法
【3】、在“main”方法中建立一个autoreleasepool
【4】、将本身的代码放在autoreleasepool中
注意:建立自动释放池的缘由是,你不能访问主线程的自动释放池,因此须要本身建立一个。git

四、NSOperation的经常使用方法
【1】、start:开始方法,当把NSOperation添加到NSOperationQueue中去后,队列会在操做中调用start方法。
【2】、addDependency,removeDependency:添加从属性,删除从属性,好比说有线程a,b,若是操做a从属于b,那么a会等到b结束后才开始执行。
【3】、setQueuePriority:设置线程的优先级。例:[a setQueuePriority:NSOperationQueuePriorityVeryLow];一共有四个优先级:NSOperationQueuePriorityLow,NSOperationQueuePriorityNormal,NSOperationQueuePriorityHigh,NSOperationQueuePriorityVeryHigh。
当你添加一个操做到一个队列时,在对操做调用start以前,NSOperationQueue会浏览全部的操做,具备较高优先级的操做会优先执行,具备相同优先级的操做会按照添加到队列中顺序执行。
【4】、setCompletionBlock:设置回调方法,当操做结束后,会调用设置的回调block。这个block会在主线程中执行。github

示例代码:https://github.com/chenjiang3/ios-demo/tree/master/ClassicPhotos多线程

相关文章
相关标签/搜索