NSOperation和NSOperationQueue

来源:互联网 发布:js百度地图绘制轨迹 编辑:程序博客网 时间:2024/05/05 16:15



使用这2个类,我们不用考虑线程的生命周期,同步,加锁等问题.


默认情况下,NSOperation不具备封装操作的能力,必须使用它的子类,使用NSOperation子类的方式一般有3种:
1NSInvocationOperation
2NSBlockOperation
3手工实现一个NSOperation的子类,并重写NSOperation对象的main方法


注意:
1如果没把NSInvocationOperation或者NSBlockOperation添加到NSOperationQueue中去,NSInvocationOperation或者NSBlockOperation中的操作方法,默认将会被同步执行
2如果向NSBlockOperation中添加了多个block,既使没把NSBlockOperation添加到NSOperationQueue中去,也会另外的开辟新的线程,并且并发的执行这几个block
3一旦把NSInvocationOperation或者NSBlockOperation添加到NSOperationQueue,
操作代码便会立即异步并发执行,而不用显式的调用
start方法


技巧:
可以在操作代码中,调用[NSThread currentThread]方法,来查看一下到底队列为这许多操作,总共开了多少条线程


为了防止几个操作并发的执行,可以给NSOperation对象添加相互的依赖:
addDependency方法
1甚至,处于不同队列里的操作对象间,也是可以添加相互的依赖的
2注意,不能交叉依赖,造成依赖的死循环


同时并发的线程数太多,内存和CPU占用也会更多,为了节约系统资源,可以设置队列中的最大线程并发数:
[queue setMaxConcurrentOperationCount:2];

0 0
原创粉丝点击