美文网首页
关于网络请求的方法

关于网络请求的方法

作者: 程序猿界的cai渣渣 | 来源:发表于2017-09-19 15:30 被阅读15次
    1、顺序请求数据

    在开发中,数据请求可能需要进行逐步逐个进行。需要用到NSOperationQueue。具体如下:

    NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{
        //默认创建的信号为0
        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
        //这里是请求的方法(自定义或者AFN)
        [[ZSKNNetworking shareInstance] requestDataWithBusCode:@"" TransactionID:@"" 
    TimeStamp:@"" ReqInfo:productLabelReqInfo type:(HttpRequestTypeGet) 
    success:^(id responseObject) {       
                //这里请求成功信号量 +1 为1
                dispatch_semaphore_signal(semaphore);
            } failure:^(NSError *error) {
                //这里请求成功信号量 +1 为1
                dispatch_semaphore_signal(semaphore);
            }];
    }];
    
    NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithBlock:^{
        //默认创建的信号为0
        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
        //这里是请求的方法(自定义或者AFN)
        [[ZSKNNetworking shareInstance] requestDataWithBusCode:@"" TransactionID:@"" 
    TimeStamp:@"" ReqInfo:productLabelReqInfo type:(HttpRequestTypeGet) 
    success:^(id responseObject) {
                //这里请求成功信号量 +1 为1
                dispatch_semaphore_signal(semaphore);
            } failure:^(NSError *error) {
                //这里请求成功信号量 +1 为1
                dispatch_semaphore_signal(semaphore);
            }];
    }];
    
    NSBlockOperation *operation3 = [NSBlockOperation blockOperationWithBlock:^{
        //默认创建的信号为0
        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
        //这里是请求的方法(自定义或者AFN)
        [[ZSKNNetworking shareInstance] requestDataWithBusCode:@"" TransactionID:@"" 
    TimeStamp:@"" ReqInfo:productLabelReqInfo type:(HttpRequestTypeGet) 
    success:^(id responseObject) {
                //这里请求成功信号量 +1 为1
                dispatch_semaphore_signal(semaphore);
            } failure:^(NSError *error) {
                //这里请求成功信号量 +1 为1
                dispatch_semaphore_signal(semaphore);
            }];
    }];    
    //这是顺序执行方法
    [operation2 addDependency:operation1];
    [operation3 addDependency:operation2];
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    //放入到队列中
    [queue addOperations:@[operation1, operation2, operation3] waitUntilFinished:NO];
    //添加关于信号量的监听通知
    [queue addObserver:self forKeyPath:@"operationCount" options:0 context:nil];
    以上是在方法中的内容。
    
    //添加监听(数据请求)
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
        
        if ([keyPath isEqualToString:@"operationCount"]) {
            NSOperationQueue *queue = (NSOperationQueue *)object;
            if (queue.operationCount == 0) {
                NSLog(@"全部完成");
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:关于网络请求的方法

          本文链接:https://www.haomeiwen.com/subject/tiwwsxtx.html