1. 创建了3个任务,加入到队列中去执行
- (void)createOperationQueue
{
//创建一个队列
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
//创建一个任务
LJOperation *op1 = [[LJOperation alloc]init];
op1.nameStr = @"op1";
LJOperation *op2 = [[LJOperation alloc]init];
op2.nameStr = @"op2";
LJOperation *op3 = [[LJOperation alloc]init];
op3.nameStr = @"op3";
NSLog(@"block----%@",[NSThread currentThread]);
//把任务添加到队列当中去,相当于调用了任务的start方法
//倘若我们希望LJOperation执行某种方法,只需要重写start方法就可以,(系统会自动去调start方法)
[queue addOperation:op1];
[queue addOperation:op2];
[queue addOperation:op3];
}
看看控制台打印的结果;
2017-07-07 22:49:04.195 IOSNetWorkDemo[4452:393020] __FUNCTION__start_op1
2017-07-07 22:49:04.195 IOSNetWorkDemo[4452:393051] __FUNCTION__start_op3
2017-07-07 22:49:04.195 IOSNetWorkDemo[4452:393022] __FUNCTION__start_op2
从上面的结果可以看出op1先执行,然后op3,然后op2,没有按照顺序执行。
这是为什么了?因为当我们把operation添加到队列中去后,就相当于把operation交给了系统,然后由系统决定它的执行顺序。
上面自定义的 NSOperation
@interface LJOperation : NSOperation
//随便传入一个名字,作为Operation区分用
@property(nonatomic,copy)NSString *nameStr;
@end
#import "LJOperation.h"
@implementation LJOperation
//重写NSOperation的start方法,在此处写下你想执行的方法代码
- (void)start
{
//do something
NSLog(@"%s",__FUNCTION__);
NSLog(@"__FUNCTION__start_%@",self.nameStr);
}
- (void)main
{
NSLog(@"%s",__FUNCTION__);
// NSLog(@"__FUNCTION__main_%@",self.nameStr);
}