二次封装的GCD使用

http://blog.devtang.com/2012/02/22/use-gcd/  唐巧对于原生GCD的理解


串行队列 & 并发队列

 //创建队列

  GCDQueue *queue = [[GCDQueue alloc] initConcurrent];   //initSerial  串行队列    initConcurrent 并发队列


GCD线程组

    //等线程1和线程2执行完了之后,执行线程3

    GCDGroup *group = [[GCDGroup alloc] init];

    GCDQueue *queue = [[GCDQueue alloc] initConcurrent];

    

   [queue execute:^{

       sleep(1);

       NSLog(@"线程1开始执行");

   } inGroup:group];

    

    [queue execute:^{

        sleep(3);

        NSLog(@"线程2开始执行");

    } inGroup:group];

    

    [queue notify:^{

        NSLog(@"线程3开始执行");

    } inGroup:group];


GCD定时器

  /**

     *  GCDTimer 精准度比NSTimer低。

        如果NSTimer用在改变UITableView上会出现一些问题,这个使用GCDTimer就没有问题

     *

     */


     self.gcdTimer  = [[GCDTimer alloc] initInQueue:[GCDQueue mainQueue]];

    

    [self.gcdTimer event:^{

        NSLog(@"GCD定时器");

    } timeInterval:NSEC_PER_MSEC];

    

    [self.gcdTimer start];


GCD延时执行

// GCD延时执行操作缺点:延时精确度不是特别高,而且无法取消延时操作。

// 优点:代码简介,简练


//NSThread方式精确度高,并且可以取消延时操作

//缺点:写代码比较麻烦。


//NSThread方式的延时执行方式

    [self performSelector:@selector(thradEvent:) withObject:self afterDelay:2.0f];

    

    //取消延时执行操作

    [NSObject cancelPreviousPerformRequestsWithTarget:self];

    

    //GCD方式的延时执行操作

    [GCDQueue executeInMainQueue:^{

        

        NSLog(@"GCD线程事件");

        

    } afterDelaySecs:2.0f];



- (void)thradEvent:(id)sender{

    

    NSLog(@"线程事件");

}


GCD信号组

  /**

     *  线程1和线程2同时执行线程。当线程2执行到wait,那么就会线程阻塞。当线程1发送信号的时候,然后线程2才继续执                      行。 也就是把异步转化为同步线程。

     */

GCDSemaphore *semaphore = [[GCDSemaphore alloc] init];

   

    [GCDQueue executeInGlobalQueue:^{

        //发送信号

        [semaphore signal];

        NSLog(@"线程1");

    }];

    

    

    [GCDQueue executeInGlobalQueue:^{

        

        //等待信号

        [semaphore wait];

        

        NSLog(@"线程2");

    }];


Ps:详情参考极客学院GCD编程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二次封装是指在原有的功能基础上进行封装,提供更加简洁易用的接口。在请求方面,二次封装可以将常用的请求操作进行封装,以便重复使用和提高代码的可读性。 使用二次封装可以有以下几个步骤: 1. 创建一个请求封装类,可以命名为 RequestWrapper 或者其他合适的名称。 2. 在该封装类中,可以定义一些常用的请求方法,例如 GET、POST、PUT、DELETE 等。 3. 在每个请求方法中,可以使用底层的请求库,如 requests 或者 urllib,来发送具体的请求。 4. 在具体请求方法中,可以处理一些通用的请求参数,例如请求头、超时时间等。 5. 在封装类中,可以提供一些额外的功能,例如异常处理、日志记录等。 6. 在使用封装类时,只需要实例化该类,并调用相应的请求方法即可完成请求操作。 下面是一个简单的示例代码: ```python import requests class RequestWrapper: def __init__(self): self.base_url = 'https://api.example.com' def get(self, path, params=None): url = self.base_url + path response = requests.get(url, params=params) # 处理响应结果,返回所需的数据 def post(self, path, data=None): url = self.base_url + path response = requests.post(url, json=data) # 处理响应结果,返回所需的数据 # 使用示例 wrapper = RequestWrapper() response = wrapper.get('/users', params={'id': 1}) ``` 这样,你可以通过调用 `wrapper.get()` 或 `wrapper.post()` 方法来发送请求,而不需要每次都编写完整的请求代码。同时,你还可以根据具体的需求,在封装类中添加其他方法或功能来满足不同的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值