博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程 NSOperation
阅读量:6873 次
发布时间:2019-06-26

本文共 3831 字,大约阅读时间需要 12 分钟。

hot3.png

//

//  ViewController.m

//  NSOperation

//

//  Created by dc008 on 15/12/24.

//  Copyright © 2015 崔晓宇. All rights reserved.

//

#define ROW 5

#define COLUMN 3

#define IMAGE_COUNT ROW*COLUMN

#define WIDTH 100 //图片宽

#define HEIGHT WIDTH //图片高

#import "ViewController.h"

ViewController ()

{

    NSMutableArray *_imageViews;

    NSArray *array;

}

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    [self layout];

    array = @[@"http://pic12.nipic.com/20110121/3556745_181933155140_2.jpg",

              @"http://pic31.nipic.com/20130722/12196046_160624534194_2.jpg",

              @"http://pic4.nipic.com/20091118/3047572_163336087407_2.jpg",

              @"http://pic.nipic.com/2008-05-29/200852973848511_2.jpg",

              @"http://pic41.nipic.com/20140504/18401726_095421197182_2.jpg",

              @"http://pic51.nipic.com/file/20141024/13035204_155709166956_2.jpg",

              @"http://pic36.nipic.com/20131125/8821914_113934565000_2.jpg",

              @"http://pic31.nipic.com/20130722/12196046_160637651196_2.jpg",

              @"http://pic28.nipic.com/20130412/3718408_231850588113_2.jpg",

              @"http://pica.nipic.com/2007-06-06/20076615744388_2.jpg",

              @"http://pic23.nipic.com/20120901/8737320_222046006000_2.jpg",

              @"http://pic12.nipic.com/20110119/3556745_180736335138_2.jpg",

              @"http://pic27.nipic.com/20130226/6806713_165327321179_2.jpg",

              @"http://pic18.nipic.com/20111202/8920105_164704212146_2.jpg",

              @"http://img.taopic.com/uploads/allimg/110914/8879-11091423505866.jpg"

              ];

}

- (void)layout{

    _imageViews = [NSMutableArray array];

    for (int r = 0; r < COLUMN; r++) {

        for (int c = 0; c < ROW; c++) {

            UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(18.75 + r *118.75, 20+ c *118.75,WIDTH , HEIGHT)];

            imageView.backgroundColor = [UIColor orangeColor];

            [self.view addSubview:imageView];

            [_imageViews addObject:imageView];

        }

        

    }

    //添加按钮

    UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];

    button.frame = CGRectMake(50, 600, 275, 30);

    [button setTitle:@"加载图片" forState:UIControlStateNormal];

    [button addTarget:self action:@selector(useMultiThread) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:button];

}

- (void)loadImage : (NSNumber *)index {

    

    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://pic31.nipic.com/20130722/12196046_160624534194_2.jpg"]]];

    

    //更新UI界面,调用主线程队列

    [[NSOperationQueue mainQueue]addOperationWithBlock:^{

        [self updateImage:@[data,index]];

    }];

}

- (void)updateImage : (NSArray *)arr{

    UIImage *image = [UIImage imageWithData:arr[0]];

    UIImageView *imageView = _imageViews[[arr[1]intValue] ];

    imageView.image = image;

}

- (void)useMultiThread{

  //1.创建一个操作队列

    NSOperationQueue *operationQueue = [[NSOperationQueue alloc]init];

    operationQueue.maxConcurrentOperationCount = 5;//设置最大并发线程数

  //2.向队列添加操作

//    for (int i= 0 ; i<IMAGE_COUNT; i++) {

        //方法1.创建操作块,添加到队列

//        NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{

//            [self loadImage : [NSNumber numberWithInt:i]];

//            

//        }];

//        [operationQueue addOperation:blockOperation];

//

        //方法2.祷文invocation

//        NSInvocationOperation *invocationOperation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(loadImage:) object:[NSNumber numberWithInt:i]];

//        [operationQueue addOperation:invocationOperation];

        

        //方法3.控制线程的执行顺序

        NSBlockOperation *lastOperation = [NSBlockOperation blockOperationWithBlock:^{

            [self loadImage:@(IMAGE_COUNT-1)];

        }];

        for (int j = 0; j<IMAGE_COUNT-1; j++) {

            NSBlockOperation *normalOp = [NSBlockOperation blockOperationWithBlock:^{

                [self loadImage:[NSNumber numberWithInt:j]];

            }];

            //设置依赖操作(普通依赖最后)

            [normalOp addDependency:lastOperation];

            [operationQueue addOperation:normalOp];

        }

    [operationQueue addOperation:lastOperation];

    

    //}

    

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

@end

转载于:https://my.oschina.net/u/2499773/blog/550622

你可能感兴趣的文章
nfs
查看>>
Angular vs React 最全面深入对比
查看>>
containerd项目正式从CNCF毕业
查看>>
中台之上(十二):如何快速设计业务架构?
查看>>
C#的未来:托管指针
查看>>
微软发布UWP Bridge项目将一切应用转为Windows应用
查看>>
语义鸿沟、异构鸿沟、数据缺失,多模态技术如何跨过这些坎?
查看>>
与广告“互动”—情景互动式创意广告
查看>>
使用外部表查看ORACLE报警日志
查看>>
业务发展如何利用创新驱动力量?
查看>>
云数据加密公司LOCKet获千万级Pre-A融资
查看>>
爱尔兰WElink Energy宣布在葡萄牙建立220MW太阳能光伏项目
查看>>
如何从敏捷到精益地修复bug与解决问题
查看>>
开启智慧新生活 新余市智慧城市建设全省率先
查看>>
智慧东湖让城市慢游更幸福
查看>>
陕西联通推进高速公路WiFi覆盖
查看>>
PHP开发者常犯的10个MySQL错误
查看>>
物联网在交通领域示范应用的三大趋势
查看>>
浅谈如何用Java操作MongoDB?
查看>>
Java ConcurrentModificationException异常原因和解决方法
查看>>