- //
- // ViewController.m
- // Test
- //
- // Created by 路灯下的黑猫 on 2018/8/24.
- // Copyright © 2018 年 张浩. All rights reserved.
- //
- #import "ViewController.h"
- staticNSIntegerconstAddTag =100;
- @interface ViewController ()
- @property (nonatomic, strong) UIImageView *imageView;
- @property (nonatomic, strong) NSArray *urlArr;
- @end
- @implementation ViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- self.urlArr = @[@"http://weixue.steptowin.com:8000/data/img/20160411/veuyytthy4b2_320_200.jpg",
- @"http://weixue.steptowin.com:8000/data/img/20160528/qcxt7ow9syjo.png",
- @"http://weixue.steptowin.com:8000/data/img/20160527/zeol7j6gsto9.png",
- @"http://weixue.steptowin.com:8000/data/img/20160413/wag5q4elonh4_320_200.jpg",
- @"http://weixue.steptowin.com:8000/data/img/20160411/veuyytthy4b2_320_200.jpg",
- @"http://weixue.steptowin.com:8000/data/img/20160528/qcxt7ow9syjo.png",
- @"http://weixue.steptowin.com:8000/data/img/20160527/zeol7j6gsto9.png",
- @"http://weixue.steptowin.com:8000/data/img/20160413/wag5q4elonh4_320_200.jpg",
- @"http://weixue.steptowin.com:8000/data/img/20160411/veuyytthy4b2_320_200.jpg",
- @"http://weixue.steptowin.com:8000/data/img/20160528/qcxt7ow9syjo.png",
- @"http://weixue.steptowin.com:8000/data/img/20160527/zeol7j6gsto9.png",
- @"http://weixue.steptowin.com:8000/data/img/20160413/wag5q4elonh4_320_200.jpg"];
- /* 简单线程 **/
- //[self thread];
- /* 队列操作 **/
- //[self operation];
- /*GCD**/
- [selfGCD];
- }
- /********** 线程 Thread 操作 ************/
- - (void)thread {
- _imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
- [self.view addSubview:_imageView];
- UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
- button.frame=CGRectMake(50,500,220,25);
- [buttonsetTitle:@"加载图片" forState:UIControlStateNormal];
- // 添加方法
- [buttonaddTarget:self action:@selector(threadClick) forControlEvents:UIControlEventTouchUpInside];
- [self.viewaddSubview:button];
- }
- - (void)threadClick {
- [NSThread detachNewThreadSelector:@selector(threadRun) toTarget:self withObject:nil];
- }
- - (void)threadRun {
- NSLog(@"callMainbefore_1");
- NSURL*url=[NSURLURLWithString:self.urlArr.firstObject];
- NSData *data=[NSData dataWithContentsOfURL:url];
- NSLog(@"callMainbefore_2");
- /*
- 直到 updateUI: 做完了 是否才开始往下操作
- waitUntilDone:NO
- 2016-06-02 17:13:47.618 多线程处理 [10042:208753] callMainbefore_1
- 2016-06-02 17:13:47.673 多线程处理 [10042:208753] callMainbefore_2
- 2016-06-02 17:13:47.674 多线程处理 [10042:208753] callMainAfter
- 2016-06-02 17:13:52.675 多线程处理 [10042:208668] callMain
- waitUntilDone:YES
- 2016-06-02 17:16:05.525 多线程处理 [10062:210446] callMainbefore_1
- 2016-06-02 17:16:05.607 多线程处理 [10062:210446] callMainbefore_2
- 2016-06-02 17:16:10.609 多线程处理 [10062:210347] callMain
- 2016-06-02 17:16:10.613 多线程处理 [10062:210446] callMainAfter
- **/
- [self performSelectorOnMainThread:@selector(updateUI:) withObject:data waitUntilDone:YES];
- NSLog(@"callMainAfter");
- }
- - (void)updateUI:(NSData*)imageData {
- sleep(5);
- NSLog(@"callMain");
- self.imageView.image= [UIImageimageWithData:imageData];
- }
- /********** 线程 Thread 结束 ************/
- /********** 队列 操作 ************/
- - (void)operation {
- CGFloatspace =10;
- CGFloatimageWH = (320-10*5)/4.0;
- for(NSIntegeri =0; i
- UIImageView* imageView = [[UIImageViewalloc]init];
- [self.viewaddSubview:imageView];
- imageView.frame=CGRectMake(space +(space+imageWH)*(i%4), space +(space+imageWH)*(i/4), imageWH, imageWH);
- imageView.tag=AddTag+ i;
- }
- UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
- button.frame=CGRectMake(50,500,220,25);
- [buttonsetTitle:@"加载图片" forState:UIControlStateNormal];
- [buttonaddTarget:self action:@selector(operationClick) forControlEvents:UIControlEventTouchUpInside];
- [self.viewaddSubview:button];
- }
- - (void)operationClick {
- NSOperationQueue * queue = [[NSOperationQueue alloc]init];
- queue.maxConcurrentOperationCount = 2;
- __weak typeof(self)weakSelf = self;
- for(NSIntegeri =0; i
- UIImageView* imageView = [self.viewviewWithTag:AddTag+i];
- imageView.image=nil;
- NSBlockOperation * blockOp = [NSBlockOperation blockOperationWithBlock:^{
- NSURL*url=[NSURLURLWithString:weakSelf.urlArr[i]];
- NSData*data=[NSDatadataWithContentsOfURL:url];
- dispatch_async(dispatch_get_main_queue(), ^{
- // 更新 UI 需要主线程
- imageView.image= [UIImageimageWithData:data];
- });
- }];
- if(i>0) {
- /* 就是 依赖前面的 **/
- NSBlockOperation* preOperation = queue.operations[i-1];
- [blockOpaddDependency:preOperation];
- }
- [queueaddOperation:blockOp];
- }
- }
- /********** 队列 操作结束 ************/
- /****************** GCD ******************/
- - (void)GCD {
- CGFloatspace =10;
- CGFloatimageWH = (320-10*5)/4.0;
- for(NSIntegeri =0; i
- UIImageView* imageView = [[UIImageViewalloc]init];
- [self.viewaddSubview:imageView];
- imageView.frame=CGRectMake(space +(space+imageWH)*(i%4), space +(space+imageWH)*(i/4), imageWH, imageWH);
- imageView.tag=AddTag+ i;
- }
- UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
- button.frame=CGRectMake(50,500,220,25);
- [buttonsetTitle:@"加载图片" forState:UIControlStateNormal];
- // 添加方法
- [buttonaddTarget:self action:@selector(GCDClick) forControlEvents:UIControlEventTouchUpInside];
- [self.viewaddSubview:button];
- }
- /* 串行执行 **/
- - (void)GCDClick {
- __weak typeof(self)weakSelf = self;
- dispatch_queue_tserialQueue =dispatch_queue_create("LeeGCDQueue",DISPATCH_QUEUE_SERIAL);
- for(NSIntegeri =0; i
- UIImageView* imageView = [self.viewviewWithTag:AddTag+i];
- imageView.image=nil;
- dispatch_async(serialQueue, ^{
- NSURL*url=[NSURLURLWithString:weakSelf.urlArr[i]];
- NSData*data=[NSDatadataWithContentsOfURL:url];
- dispatch_async(dispatch_get_main_queue(), ^{
- // 更新 UI 需要主线程
- imageView.image= [UIImageimageWithData:data];
- });
- });
- }
- }
- ///* 并发执行 **/
- //- (void)GCDClick {
- //
- // __weak typeof(self)weakSelf = self;
- // dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
- // for (NSInteger i = 0 ; i < self.urlArr.count; i++) {
- // UIImageView * imageView = [self.view viewWithTag:AddTag+i];
- // imageView.image = nil;
- // dispatch_async(globalQueue, ^{
- //
- // NSURL *url=[NSURL URLWithString:weakSelf.urlArr[i]];
- // NSData *data=[NSData dataWithContentsOfURL:url];
- // dispatch_async(dispatch_get_main_queue(), ^{
- //
- // // 更新 UI 需要主线程
- // imageView.image = [UIImage imageWithData:data];
- // });
- //
- //
- // });
- //
- // }
- //
- //}
- /****************** GCD 结束 ******************/
- @end
来源: http://www.jianshu.com/p/306b4ad92390