当前位置:编程学习 > wap >>

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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,