NSOperation、NSOperationQueue的学习
2017-11-09 本文已影响15人
慕言的世界
虽然一直说多线程,但是因为实际项目中几乎用不到自己开辟新的线程所以只有一点了解而已,现在公司没事就来学习学习。写下这篇文章只是作为自己以后的方便查阅,别无他意。
NSOperation
NSOperration
只是iOS中一个抽象的类不能封装任务。但是它有俩字子类分别是NSInvocationOperation
NSBlockOperation
其实它俩只是Block与Target的区别。
NSInvocationOperation
用法
NSInvocationOperation *Operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test) object:nil];
[Operation start];//需要手动启动任务
NSBlockOperation
用法
NSBlockOperation *operation=[NSBlockOperation blockOperationWithBlock:^{
}];
//添加操作
[operation addExecutionBlock:^{
}];
[operation start];//需要手动启动任务
以上默认都是在主线程操作的。如果想开辟新的线程则需加入队列
NSOperationQueue
添加操作到NSOperationQueue中,自动执行操作,自动开启线程
NSOperationQueue *Queue = [[NSOperationQueue alloc]init];
//添加到这种队列中的任务(NSOperation),就会自动放到子线程中执行
NSOperationQueue *mainqueue = [NSOperationQueue mainQueue];
//凡是添加到主队列中的任务(NSOperation),都会放到主线程中执行
//俩个都是添加到队列 区别还是。target、block的区别
- (void)addOperation:(NSOperation *)op;
- (void)addOperationWithBlock:(void (^)(void))block
//添加依赖操作
- (void)addDependency:(NSOperation *)op;
// 让Op2依赖于 op1,则先执行op1,在执行Op2
[Op2 addDependency:op1];
//删除依赖操作
- (void)removeDependency:(NSOperation *)op;
//默认是-1 表示不进行限制,并发 。为1时,进行串行执行
@property NSInteger maxConcurrentOperationCount;
//取消全部队列
- (void)cancelAllOperations;
//等待别的队列结束
- (void)waitUntilAllOperationsAreFinished;