//
//? 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 = @[@"https://pic.songma.com/wenzhang/20200424/t2i5ppyna4h426.jpg",
? ? ? ? ? ? ? ? ? ? @"https://pic.songma.com/wenzhang/20200424/jtbrdzctrsg427.png",
? ? ? ? ? ? ? ? ? ? @"https://pic.songma.com/wenzhang/20200424/xy1bse2acwu428.png",
? ? ? ? ? ? ? ? ? ? @"https://pic.songma.com/wenzhang/20200424/m5upujj4053429.jpg",
? ? ? ? ? ? ? ? ? ? @"https://pic.songma.com/wenzhang/20200424/t2i5ppyna4h426.jpg",
? ? ? ? ? ? ? ? ? ? @"https://pic.songma.com/wenzhang/20200424/jtbrdzctrsg427.png",
? ? ? ? ? ? ? ? ? ? @"https://pic.songma.com/wenzhang/20200424/xy1bse2acwu428.png",
? ? ? ? ? ? ? ? ? ? @"https://pic.songma.com/wenzhang/20200424/m5upujj4053429.jpg",
? ? ? ? ? ? ? ? ? ? @"https://pic.songma.com/wenzhang/20200424/t2i5ppyna4h426.jpg",
? ? ? ? ? ? ? ? ? ? @"https://pic.songma.com/wenzhang/20200424/jtbrdzctrsg427.png",
? ? ? ? ? ? ? ? ? ? @"https://pic.songma.com/wenzhang/20200424/xy1bse2acwu428.png",
? ? ? ? ? ? ? ? ? ? @"https://pic.songma.com/wenzhang/20200424/m5upujj4053429.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
Ai儿童卡片机早教机智能机器人男女孩陪伴玩具高科技wifi多功能语音人工对话益智教育双语识字学习故事机
优必选阿尔法机器人AlphaEbot人工智能教育陪伴可编程腾讯叮当语音对话儿童早教机学习跳舞蹈走路
MAKEBLOCK 童心制物 mbot可编程教育机器人 儿童益智拼装智能玩具diy套件 创客教育器材
MAKEBLOCK 童心制物 Ranger游侠三合一儿童可编程机器人 智能益智玩具拼装创客教育套件
Sphero RVR乐福多功能可编程机器人 履带坦克全地形小车 儿童创客入门steam教育智能益智玩具男女孩生日礼物
鲸鱼教育机器人编程遥控工程车挖土推土3-5-6岁那女宝宝智能科教会动积木教育机器人送礼智能积木益智玩具