/**
* 延时执行任务
*
* @param aSelector 需要延时执行的任务
* @param anArgument 传递给任务的参数
* @param delay 延时的时间
*/
- (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;
/**
* 延时执行
*
* @param when 什么时间执行
* @param queue 任务添加到那个队列
* @param block 待延时的任务block
*/
void dispatch_after(dispatch_time_t when, dispatch_queue_t queue, dispatch_block_t block);
// 任务添加到主队列
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self downLoadPicFromNet];
});
// 任务添加到全局队列
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)),
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self downLoadPicFromNet];
});
/**
* 一次性代码
*
* @param predicate 一次性执行标记,用于判断一次性代码块是否执行过
* @param block 一次性代码块
*/
void dispatch_once(dispatch_once_t *predicate, dispatch_block_t block);
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSLog(@"dispatch once code ");
});
// 触摸后开始下载图片,开启两条子线程下载两张图片,等下载完成到主线程合成并刷新UI显示到屏幕
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
// 1.创建队列组
dispatch_group_t group = dispatch_group_create();
// 2.创建任务下载图片
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 下载一个图片
NSString *url = @"http://i6.topit.me/6/5d/45/1131907198420455d6o.jpg";
image1 = [self getimageWithURLString:url];
});
__block UIImage *image2 = nil;
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 下载一个图片
NSString *url = @"http://pic1a.nipic.com/2008-12-04/2008124215522671_2.jpg";
image2 = [self getimageWithURLString:url];
});
// 3、两张都下载完毕后执行合成
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
// 两个图片下载完成后回到主线程执行 ----- 合并
// 开启图片上下文
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0);
[image1 drawInRect:CGRectMake(0, 0, self.view.bounds.size.width,
self.view.bounds.size.height * 0.5)];
[image2 drawInRect:CGRectMake(0, self.view.bounds.size.height * 0.5,
self.view.bounds.size.width, self.view.bounds.size.height * 0.5)];
self.imageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
});
}