`
我的专长叫做流浪
  • 浏览: 1942 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

GCD常用方法

阅读更多
GCD常用方法

//使用GCD创建多线程
-(void)initWithGCD
{
    //使用GCD创建多线程
    dispatch_queue_t groupBack=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

   dispatch_async(groupBack, ^{
       [self initWithSameRequest];
    });
   
    /*1 2 3 线程执行完 才开始执行4 5 6. 也就是说1 2 3 开始执行 4 5 6处于等待状态,1 2 3 执行完4 5 6马上进去执行*/
/*    dispatch_queue_t aDQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_group_t group = dispatch_group_create();
    dispatch_group_async(group, aDQueue, ^{
        NSLog(@"task 1 \n");
    });
    dispatch_group_async(group, aDQueue, ^{
        NSLog(@"task 2 \n");
    });
    dispatch_group_async(group, aDQueue, ^{
        NSLog(@"task 3 \n");
    });
    dispatch_group_wait(group, DISPATCH_TIME_FOREVER);//其他同类等待
    dispatch_release(group);
   
    NSLog(@"1 23 完成 4 5 6开始了");
   
   
    group = dispatch_group_create();
   
   
    dispatch_group_async(group, aDQueue, ^{
        NSLog(@"task 4 \n");
    });
    dispatch_group_async(group, aDQueue, ^{
        NSLog(@"task 5 \n");
    });
    dispatch_group_async(group, aDQueue, ^{
        NSLog(@"task 6 \n");
    });
   
    dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
    dispatch_release(group);*/
}

2.//使用GCD通知主线程执行
-(void)initWithGradeCenterDispatch
{
    dispatch_queue_t  Queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(Queue, ^{
        NSURL * URL=[NSURL URLWithString:@"http://avatar.csdn.net/2/C/D/1_totogo2010.jpg"];
        NSData * DATA=[[NSData alloc]initWithContentsOfURL:URL];
        UIImage * image=[[UIImage alloc]initWithData:DATA];
       
        if (DATA!=nil)
        {
            //通知主线程更新界面
            dispatch_async(dispatch_get_main_queue(),
                           ^{
                               self.imageView.image=image;
                           });
           
        }
    });
}
3. //顺序执行
-(void)initDownLocation
{
    dispatch_queue_t  main=dispatch_queue_create("gcdtest.rongfzh.yc",DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(main, ^{
        NSLog(@"任务1\n%@",[NSDate date]);
    });
    dispatch_async(main, ^{
        NSLog(@"任务2\n%@",[NSDate date]);
    });
    dispatch_barrier_async(main, ^{
        NSLog(@"任务3\n%@",[NSDate date]);
    });
    dispatch_async(main, ^{
        NSLog(@"任务4\n%@",[NSDate date]);
    });
      
}

//代码执行N次
-(void)Ntimes
{
    dispatch_queue_t groupBack=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_apply(5,groupBack, ^(size_t index)
    {
    // 执行5次
        NSLog(@"执行5次了吗");
    });
}
//创建一个同步请求
-(void)initWithSameRequest
{

    NSURL * url=[NSURL URLWithString:@"http://api.douban.com/book/subjects?q=%E4%B8%89&start-index=1&max-results=10&apikey=04f1ae6738f2fc450ed50b35aad8f4cf&alt=json"];
    ASIHTTPRequest * request=[[ASIHTTPRequest alloc]initWithURL:url];
  
    //设置是否按服务器在Header里指定的是否可被缓存或过期策略进行缓存:
    //[[ASIDownloadCache sharedCache]setShouldRespectCacheControlHeaders:NO];
    //设置缓存的有效时间 30天
    //[request setSecondsToCache:60*60*24*30];
    //判断能不能重缓存种读取
    //[request didUseCachedResponse];
    //设置缓存的路径
//    NSArray * path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//    NSString * docpath=[path objectAtIndex:0];
//    [request setDownloadDestinationPath:docpath];
    //设置缓存 把缓存数据永久保存在本 地,
    [request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
   
  // [request setDownloadDestinationPath:[[ ASIDownloadCache sharedCache ] pathToStoreCachedResponseDataForRequest:request ]];
    [request startSynchronous];//同步下载
    NSError * error=[request error];
    if (!error)
    {
        //NSString *
        NSDictionary * json=[request.responseData objectFromJSONData];
     
        NSArray * allBooks = [json objectForKey:@"entry"];
        for (NSDictionary * book in allBooks)
        {
            // model=[[BookModel alloc]init];
            //评论
            NSString * avger=[[book objectForKey:@"gd:rating"]objectForKey:@"@average"];
            // model.rating=[avger floatValue];
            NSLog(@"%f",[avger floatValue]);
            NSString * number=[[book objectForKey:@"gd:rating"]objectForKey:@"@numRaters"];
            // model.numRatings=[number intValue];
            NSLog(@"%d",[number intValue]);
            //书的名字
            NSString * titleName=[[book objectForKey:@"title"] objectForKey:@"$t"];
            NSLog(@"书的名字:  %@",titleName);
           
            //model.bookName=titleName;
            //        NSArray * authotArray=[book objectForKey:@"author"];
            //        for (NSDictionary *author in authotArray)
            //        {
            //            NSString * authorName=[[book objectForKey:@"name"] objectForKey:@"$t"];
            //            NSLog(@"作者的名字  :%@",authorName);
            //        }
           
            // NSString * categotyName=[[book objectForKey:@"category"]objectForKey:@"@scheme"];
            // NSLog(@"categoty %@",categotyName);
           
            NSArray * attribute=[book objectForKey:@"db:attribute"];
            for (NSDictionary * attributess in attribute)
            {
                NSString * attraName=[attributess objectForKey:@"@name"];
               
                if ([attraName isEqualToString:@"pubdate"])
                {
                    NSString * pubdate=[attributess objectForKey:@"$t"];
                    NSLog(@"pubdate %@",pubdate);
                }
                else if ([attraName isEqualToString:@"publisher"])
                {
                    NSString * publisher=[attributess objectForKey:@"$t"];
                    // model.publisher=publisher;
                    NSLog(@"publisher %@",publisher);
                }
                else if ([attraName isEqualToString:@"price"])
                {
                    NSString * price=[attributess objectForKey:@"$t"];
                    NSLog(@"price %@",price);
                    //价格
                    // model.price=price;
                }
                else if ([attraName isEqualToString:@"author"])
                {
                    NSString * author=[attributess objectForKey:@"$t"];
                    NSLog(@"author %@",author);
                    //作者的名字
                    // model.autherName=author;
                }
                else if ([attraName isEqualToString:@"translator"])
                {
                    NSString * translator=[attributess objectForKey:@"$t"];
                    NSLog(@"translator %@",translator);
                    //出版社
                    //model.translator=translator;
                }
               
               
               
            }
            NSArray * link=[book objectForKey:@"link"];
            for (NSDictionary * image in link)
            {
                NSString * str=[image objectForKey:@"@rel"];
                if ([str isEqualToString:@"image"])
                {
                    //图片
                    NSString * pubdate=[image objectForKey:@"@href"];
                    NSLog(@"pubdate %@",pubdate);
                    //model.iconUrl=pubdate;
                }
                else if([str isEqualToString:@"mobile"])
                {
                    NSString * mobile=[image objectForKey:@"@href"];
                    // model.introUrl=mobile;
                    NSLog(@"mobile %@",mobile);
                }
            }
           
           
           
        }
    

    }
    [self performSelectorOnMainThread:@selector(hello) withObject:nil waitUntilDone:YES];
[request release];
}
-(void)hello
{
    NSLog(@"下载完成,请主线程注意更新");
}
//创建一个异步请求
-(void)initWithDifferent
{
    NSURL * url1=[NSURL URLWithString:@"http://api.douban.com/book/subjects?q=%E4%B8%89&start-index=1&max-results=10&apikey=04f1ae6738f2fc450ed50b35aad8f4cf&alt=json"];
    ASIHTTPRequest * request=[[ASIHTTPRequest alloc]initWithURL:url1];
   // [request cancel];//取消异步请求 这个是取消所有的异步请求
   // [request clearDelegatesAndCancel];//如果不想调用delegate方法
    request.delegate=self;
    [request startAsynchronous];//异步下载
}
分享到:
评论

相关推荐

    GCD常用和不常用API说明GCD-Demo-master.zip

    GCD常用和不常用API说明GCD_Demo-master.zip

    swift-GCD使用大全

    葵花宝典之GCD常用和不常用API说明和Demo演示,让你轻松不费脑力的理解GCD的应用场景和操作姿势

    计算GCD的简单java程序

    创建最常用的除数计算器;。。。GCD计算器允许您快速查找一组数字的最大公约数;。。。当两个数的最大公约数为1时,这两个数称为互质或相对素数。

    gcd处理ios多请求常用的几种情况

    //1、进某页面要发四个请求,四个请求之间无影响 //2、进某页面要发四个请求,四个请求之间无影响,等所有请求回来刷新界面 //3、进某页面要发四个请求,其中某个请求的请求参数是另一个请求结果的返回字段(请求2...

    计算GCD的简单java程序创建最常用的除数计算器;

    计算GCD的简单java程序创建最常用的除数计算器;

    多线程GCD的使用

    iOS多线程编程之Grand Central Dispatch(GCD)使用,具有1、常用的方法dispatch_async 2、dispatch_group_async 3、dispatch_barrier_async 4、dispatch_apply的用法

    iOS-GCD详解及简单使用

    iOS开发中,有两种常用的方法可以实现延迟执行,一种是使用GCD,另外一种是使用NSRunLoop类中提供的方法。 前言 对初学者来说,GCD似乎是一道迈不过去的坎,很多人在同步、异步、串行、并行和死锁这几个名词的漩涡中...

    常用算法模板_C++.zip

    常用算法模板_C++.zip AC自动机,Dijkstra,Floyd,GCD,KMP,KMP扩展,Kruskal,LCM,LCS,LIS,Prim,SPFA,埃氏筛,背包,并查集,多边形面积,二分搜索,高精度加法,高精度阶乘,级角排序,进制转换,快速幂,...

    整理的若干java常用工具类

    整理的若干java常用工具类,整理的若干java常用工具类,整理的若干java常用工具类

    ios多线程开发的常用四种方式和基本使用

    ios多线程开发的常用四种方式和基本使用,pthread、NSThread、NSOperation\NSOperationQueue、GCD

    iOS延迟执行方法详解

    3.GCD方法  4.sleep(NSThread)方法 延迟执行代码: - (void)delayDo : (id)sender { NSLog(@do:%@,sender); } 1.performSelector(NSObject)方法 这是iOS中常用的一种延迟执行方法. 特点:这个方法必须要在主线程中...

    常见c++代码模版,力扣常见题型模版(含答案)

    含常见的c++的模版,如滑动窗口模版,dp,字符串常用函数等。利用leetcode上的题目为依托,依照每种类型的题目模版,进行力扣答案的整理。如能改变K个字母,找连续字母的最大长度K=0时就是连续的字母的最大长度,...

    蓝桥杯介绍&心得&往年试题&相关练习

    Python蓝桥杯易错点整理和心得...gcd板子(太常用了): e2f67980fab44a379142cf4f0da0b9be.png def gcd(a,b): while b: a,b=b,a%b return a 那么lcm的板子可以由gcd推得 55b8dd00f085486e818d31f02b00f3e7.p

    最小公倍数c++.rar

    要求两个数的最小公倍数,最常用的方法是先找到这两个数的最大公约数(GCD),然后用两数的乘积除以它们的最大公约数。这种方法基于一个简单的数学原理:两个数的乘积等于它们的最大公约数和最小公倍数的乘积。即,...

    多线程开发

    多线程开发,GCD的常用函数,实现线程同步:调度组、栅栏函数、信号量、NSOpertion添加线程依赖

    常用算法代码

    | 约瑟夫环问题(数学方法) 27 | 约瑟夫环问题(数组模拟) 27 | 取石子游戏 1 27 | 集合划分问题 27 | 大数平方根(字符串数组表示) 28 | 大数取模的二进制方法 28 | 线性方程组 A[][]X[]=B[] 28 | 追赶法...

    iOS并发编程指南.pdf.zip

    iOS并发编程指南, 深入讲解iOS在编发编程中常用的GCD、NSOperation、NSOperationQueue的使用原理

    Object-C语言教程&案例,要点难点,代码示例,代码解析

    面向对象:理解类(Class)、对象(Object)、实例变量(Instance Variables)、方法(Methods)、继承(Inheritance)、封装(Encapsulation)和多态(Polymorphism)等概念。 内存管理:了解ARC(Automatic Reference Counting,...

    【逆元六大常用高效算法】

    逆元,作为一种编程必备的基础知识。在此特地真诚的奉上认真整理、雪藏依旧的PDF文档,“老少皆宜”,希望能够使你有巨大而顶尖的收获!

    dispatch_semaphore two

    ios开发GCD的dispatch_semaphore:1、常用函数及作用 2、信号量的用途:1》同步不同线程 2》当做锁来使用:3》控制同时执行的线程数:

Global site tag (gtag.js) - Google Analytics