NSURLSession来发送同步请求

NSURLConnection 发送同步请求的方法在iOS9.0已经被废弃

+ (nullable NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse * __nullable * __nullable)response error:(NSError **)error NS_DEPRECATED(10_3, 10_11, 2_0, 9_0, "Use [NSURLSession dataTaskWithRequest:completionHandler:] (see NSURLSession.h") __WATCHOS_PROHIBITED;

用来替代的NSURLSession 只有带block的方法可以调用,没有成为同步方法,我们稍微改一下,让它支持同步的请求

- (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error

{

          NSError __block *err = NULL;

          NSData __block *data;

          BOOL __block reqProcessed = false;

          NSURLResponse __block *resp;

          [[[NSURLSession sharedSession] dataTaskWithRequest:request                completionHandler:^(NSData * _Nullable _data, NSURLResponse * _Nullable _response, NSError * _Nullable _error) {

                  resp = _response;

                   err = _error;

                    data = _data;

           reqProcessed = true;

}] resume];

while (!reqProcessed) {

          [NSThread sleepForTimeInterval:0];

}

         *response = resp;

         *error = err;

           return data;

}

请求的时候调用

/NSData *data = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&resp error:&err];

NSData *data = [self sendSynchronousRequest:theRequest returningResponse:&resp error:&err];

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容