NSOperationQueue应用

NSOperation
通常直接使用NSOperation子类:NSInvocationOperation、NSBlockOperation
NSOperation 创建同步与异步操作

    //初始化一个操作,若像方式一直接调用start方法,为同步操作。即download方法会在主线程中执行.
    //方式二将操作添加到队列中为异步操作
    //方式一
    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downloadImage) object:nil];
    [operation start];
    //操作完成回调
    [operation setCompletionBlock:^{
        //更新UI
    }];
    //方式二
    NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
        [self downloadImage];
    }];
    //设置优先级(实际工作中建议不设置优先级)
    blockOperation.queuePriority = NSOperationQueuePriorityHigh;
    //操作完成回调
    [operation setCompletionBlock:^{
        //获取主线程
        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
            //更新UI
        }];
    }];
    //创建操作队列
    NSOperationQueue *operationQueue=[[NSOperationQueue alloc]init];
    operationQueue.maxConcurrentOperationCount=5;//设置最大并发线程数
    [operation addDependency:blockOperation]; //设置依赖
    //直接使用操队列添加操作
    [operationQueue addOperation:blockOperation];
    [operationQueue addOperation:operation];
    [operationQueue cancelAllOperations];//取消队列所有操作

NSOperationQueue 创建异步操作

    NSOperationQueue *operationQueue=[[NSOperationQueue alloc]init];
    operationQueue.name = @"queue";
    //将一个任务添加到队列
    [operationQueue addOperationWithBlock:^{
        //任务完成
        //获取主线程
        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
            //更新UI
        }];
    }];

NSOperationQueue相关属性与方法
[operationQueue currentQueue];//获取当前队列
- (void)waitUntilAllOperationsAreFinished; //阻塞当前线程等待队列所有操作完成
[operationQueue setSuspended:YES];//队列挂起

你可能感兴趣的:(IOS)