ios-NSOperation

ios中的NSOperation是一个抽象类,没有实现的类,

不能直接使用,方法没有实现,它是用作父类,用来约束子类都具有共同的属性和方法

NSOperation的子类

NSInvocationOperation

NSBlockOperation

自定义的operation

NSOperation和NSOperationQueue实现多线程的具体步骤

1、先将需要执行的操作封装到一个NSOperation对象中

2、然后将NSOperation对象添加到NSOperationQueue中

系统会自动将NSOperationQueue中的NSOperation取出来

将取出的NSOperation封装的操作放到一条新线程中执行。

NSOperation可以调用start方法来执行任务,默认是同步执行的。

如果将NSOperation添加到了NSOperationQueue队列中,系统会自动异步执行NSOperation中的操作

NSInvocationOperation类,调用start方法执行操作,就会调用target的sel的方法了

 NSInvocationOperation * operation=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test5) object:nil];
    //不会开启新线程,就是更新操作的状态,调用main方法
    [operation start];

 NSInvocationOperation * operation=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test5) object:nil];
    //创建队列
    NSOperationQueue * queue=[[NSOperationQueue alloc]init];
    //把操作添加到队列中,这里父类的指针可以指向子类的指针,这里会开启线程
    [queue addOperation:operation];
    
NSBlockOperation类的使用和上面差不多就是初始化应该是,其他基本都一样的。

NSBlockOperation * operation=[NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"%@",[NSThread currentThread]);
    };
还有种简单的操作,相当于是并发队列,异步执行。
 NSOperationQueue * queue=[[NSOperationQueue alloc]init];
    [queue addOperationWithBlock:^{
        NSLog(@"%@",[NSThread currentThread]);
    }];

在NSOperation中进行线程通信,回到主线程去更新UI,其实只需要这么做

 NSOperationQueue * queue=[[NSOperationQueue alloc]init];
    [queue addOperationWithBlock:^{
        //异步下载图片
        NSLog(@"异步下载图片");
        [[NSOperationQueue mainQueue]addOperationWithBlock:^{
            NSLog(@"HAH");
        }];
    }];

//获取当前的队列

[NSOperationQueue currentQueue];

往一个操作中添加多个任务,调用start 会开启线程

 NSBlockOperation * operation=[NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"%@",[NSThread currentThread]);
    }];
    [operation addExecutionBlock:^{
       NSLog(@"%@",[NSThread currentThread]);
    }];
    [operation start];


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值