网络请求

Posted HJiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络请求相关的知识,希望对你有一定的参考价值。

网络请求:

NSURLConnection

发送同步请求:

nsurlconnection发送同步请求是阻塞式,会阻塞当前线程

 

发送异步请求:

nsurlconnection发送异步请求底层是开启子线程发送请求,回调默认是在主线程中回调,如果需要在子线程中回调可以设置代理队列setDelegateQueue:子线程队列.

PS:请求大的响应数据时使用delegate方式更加适合

 

NSURLConnection与NSRunLoop

#import "ViewController.h"

@interface ViewController () <NSURLConnectionDataDelegate>
/** runLoop */
@property (nonatomic, assign) CFRunLoopRef runLoop;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 如果在子线程中使用NSURLConnection发送请求是不会有效果,因为子线程的runloop没有启动
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSURLConnection *conn = [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com/images/234234324limgAB/2342lkjasdf3kkkkk.jpg"]] delegate:self];
        // 决定代理方法在哪个队列中执行
        [conn setDelegateQueue:[[NSOperationQueue alloc] init]];
        
        // 启动子线程的runLoop
//        [[NSRunLoop currentRunLoop] run];
        
        // 保存当前runloop
        self.runLoop = CFRunLoopGetCurrent();
        
        // 启动runLoop
        CFRunLoopRun();
    });
}

#pragma mark - <NSURLConnectionDataDelegate>
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    NSLog(@"didReceiveResponse******%@", [NSThread currentThread]);
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    
    NSLog(@"didReceiveData******%@", [NSThread currentThread]);
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"connectionDidFinishLoading******%@", [NSThread currentThread]);
    
    // 停止RunLoop
    CFRunLoopStop(self.runLoop);
}

@end

 

NSURLSession

使用NSURLSession 对象创建Task,然后执行Task

Task的类型: NSURLSessionTask抽象类, 派生出子类有NSURLSessionDataTask,NSURLSesssionDownloadTask,NSURLSessionDataTask又派生出NSURLSessionUploadTask

NSURLSessionTask(抽象类)

  • NSURLSessionDataTask
    • NSURLSessionUploadTask
  • NSURLSessionDownloadTask

 

文件上传:

 

文件解压缩:

 ZipArchive框架

 

小文件写入:

NSData

 

大文件写入

NSFileHandle

NSOutPutStream

以上是关于网络请求的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段14——Vue的axios网络请求封装

前端面试题之手写promise

Python 向 Postman 请求代码片段

C#-WebForm-★内置对象简介★Request-获取请求对象Response相应请求对象Session全局变量(私有)Cookie全局变量(私有)Application全局公共变量Vi(代码片段

简单的 Javascript http 请求片段但不起作用

在片段中实现对话框时,必须在添加内容之前请求窗口功能