标签:
当使用Dispatch Queue 进行复杂处理的时候,有的时候希望不执行已追加的处理. 这种情况下可以挂起Dispatch Queue就可以, 当需要他执行的时候在执行恢复
// 挂起(可以理解为暂停)
dispatch_suspend(queue);
// 恢复
dispatch_resume(queue);
函数是在应用程序执行中只执行一次指定处理的API
singleton 常用这个函数创建
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
//
// 初始化
});
singleton
+ (instancetype)shareVC
{
// 定义了一个标识(onceToken)
// 确保block里的内容只执行一次
static ZJW_VC *vc = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
vc = [[ZJW_VC alloc] init];
});
return vc;
}
我们所使用的GCD的API 全部是C语言函数实现, Dispatch Queue通过结构体和链表被实现为FIFO队列
什么是FIFO队列: First Input First Output的缩写,先入先出队列,这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令。
使用范例
UIImageView *imageView = [[UIImageView alloc] init];
imageView.frame = CGRectMake(20, 20, self.view.frame.size.width - 40, self.view.frame.size.height - 40);
[self.view addSubview:imageView];
// 使用GCD 下载图片 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0), ^{
NSString *url =@"http://images11.app.happyjuzi.com/news/201604/22/5719667646455.jpg";
// 从网络获取数据
NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url]];
// 将网络的数据初始化UIImage 对象
UIImage *image = [[UIImage alloc] initWithData:data];
if (image != nil) {
// 该代码块将会有主线程完成
dispatch_async(dispatch_get_main_queue(), ^{
imageView.image = image;
}); // 使用异步更新界面的UI控件
}else{
NSLog(@"错误");
}
});
标签:
原文地址:http://blog.csdn.net/sinat_30162391/article/details/51399876