关于网络请求的方法

2017-09-19  本文已影响15人  程序猿界的cai渣渣
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(@"全部完成");
        }
    }
}

上一篇下一篇

猜你喜欢

热点阅读