IOS开发(62)之易做图上异步执行非UI任务
1 前言
如果想要在 易做图 的帮助下能够异步执行 Non-UI 相关任务。在主队列、串行队列和并发队列上异步执行代码块才能见识到 易做图 的真正实力。
要在分派队列上执行异步任务,你必须使用下面这些函数中的其中一个:
dispatch_async
为了异步执行向分派队列提交一个 Block Object(2 个都通过函数指定);
eg:dispatch_sync(concurrentQueue, printFrom1To1000);
dispatch_async_f
为了异步执行向分派队列提交一个 C 函数和一个上下文引用(3 项通过函数指定) 。
eg:dispatch_sync_f(concurrentQueue,NULL,printFrom1To1000);
2 代码实例
这节代码有点多,所以分了两个工程
First:ZYViewController.m
[plain] - (void) viewDidAppear:(BOOL)paramAnimated{
//新建一个队列
dispatch_queue_t concurrentQueue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//执行concurrentQueue队列
dispatch_async(concurrentQueue, ^{
__block UIImage *image = nil;
dispatch_sync(concurrentQueue, ^{
/*下载图片*/
/* 声明图片的路径*/
NSString *urlAsString = @"/2013/0519/20130519101223949.jpg";
//转换为NSURL对象
NSURL *url = [NSURL URLWithString:urlAsString]; NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
//声明NSError对象:一个NSError对象封装错误信息更丰富、更具可扩展性可以只使用一个错误代码和错误字符串。
NSError *downloadError = nil;
//获得对应的Url返回的数据(这里是一个图片的数据)
NSData *imageData = [NSURLConnection
sendSynchronousRequest:urlRequest returningResponse:nil error:&downloadError];
if (downloadError == nil &&imageData != nil){
//将NSData转换为图片
image = [UIImage imageWithData:imageData]; /* We have the image. We can use it now */
}
else if (downloadError != nil){
NSLog(@"Error happened = %@", downloadError);
}else{
NSLog(@"No data could get downloaded from the URL.");
}
});
dispatch_sync(dispatch_get_main_queue(), ^{
/* 在主线程里面显示图片*/
if (image != nil){
/* 穿件UIImageView视图 */
UIImageView *imageView = [[UIImageView alloc]
initWithFrame:self.view.bounds];
/* 设置Image */
[imageView setImage:image];
/* 内容适应视图的大小通过保持长宽比*/
[imageView setContentMode:UIViewContentModeScaleAspectFit];
/* 想Controller View添加图像视图 */
[self.view addSubview:imageView];
} else {
NSLog(@"Image isn't downloaded. Nothing to display.");
} });
});
}
- (void) viewDidAppear:(BOOL)paramAnimated{
//新建一个队列
dispatch_queue_t concurrentQueue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//执行concurrentQueue队列
dispatch_async(concurrentQueue, ^{
__block UIImage *image = nil;
dispatch_sync(concurrentQueue, ^{
/*下载图片*/
/* 声明图片的路径*/
NSString *urlAsString = @"/2013/0519/20130519101223949.jpg";
//转换为NSURL对象
NSURL *url = [NSURL URLWithString:urlAsString]; NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
//声明NSError对象:一个NSError对象封装错误信息更丰富、更具可扩展性可以只使用一个错误代码和错误字符串。
NSError *downloadError = nil;
//获得对应的Url返回的数据(这里是一个图片的数据)
NSData *imageData = [NSURLConnection
sendSynchronousRequest:urlRequest returningResponse:nil error:&downloadError];
if (downloadError == nil &
补充:移动开发 , IOS ,