iOS NSOperation基本使用

//

//  ViewController.m

//  NSOperaiton 使用Demo

//

//  Created by 邹彦军 on 16/7/20.

//  Copyright © 2016 邹彦军. All rights reserved.

//


#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController


- (void)downloadImage:(id)obj {

    

    NSLog(@"\n当前线程:%@\n传递的对象:%@", [NSThread currentThread], obj);

}



- (void)viewDidLoad {

    [super viewDidLoad];


    [self operationDemo7];

}



- (void)operationDemo1 {

    

    NSInvocationOperation *op = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(downloadImage:) object:@"invocation"];

    // start方法 会在当前线程(当前是主线程)执行 @selector方法

    [op start];

}


- (void)operationDemo2 {

    // 新队列

    NSOperationQueue *queue = [NSOperationQueue new];

    // 操作

    NSInvocationOperation *op = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(downloadImage:) object:@"invocation"];

    // 新队列添加任务 会异步执行 downloadImage: 方法

    [queue addOperation:op];

}


- (void)operationDemo3 { // 添加多个任务

    

    NSOperationQueue *queue = [NSOperationQueue new];

    for (int i = 0; i < 10; i++) {

        NSInvocationOperation *op = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(downloadImage:) object:@(i)];

        // 执行效果: 会开启多条线程,所有任务没有顺序执行,效果与GCD的并发队列&异步执行效果一样

        [queue addOperation:op];

    }

}


- (void)operationDemo4 { // 效果和operationDemo2一样

    

    NSOperationQueue *queue = [NSOperationQueue new];

    

    // 使用block定义操作,代码写在一起 方便管理、维护

    NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{

        [self downloadImage:@"invocation"];

    }];

    [queue addOperation:op];

}


- (void)operationDemo5 { // 效果和operationDemo4一样,写法更简单

    

    NSOperationQueue *queue = [NSOperationQueue new];

    

    // 更简单的,直接添加Block

    [queue addOperationWithBlock:^{

        [self downloadImage:@"invodation"];

    }];

}


- (void)operationDemo6 { // 队列中可以添加任何 NSOperation的子类

    

    NSOperationQueue *queue = [NSOperationQueue new];

    

    NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{

        [self downloadImage:@"invocation"];

    }];

    // 添加 NSBlockOperation操作

    [queue addOperation:op1];

    

    NSInvocationOperation *op2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downloadImage:) object:@"invocation"];

    // 添加 NSInvocationOperation操作

    [queue addOperation:op2];

    

}


- (void)operationDemo7 { // 线程间通讯

    

    NSOperationQueue *queue = [NSOperationQueue new];

    

    [queue addOperationWithBlock:^{ // 子线程下载任务

        

        [self downloadImage:@"invocation"];

        

        [[NSOperationQueue mainQueue]addOperationWithBlock:^{ // 回到主线程更细UI

            NSLog(@"回到主线程 更新UI");

        }];

    }];

}


@end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值