关闭

NSURLSession

42人阅读 评论(0) 收藏 举报

基础知识
//NSURLSession做网络请求
//相关的类
//1.NSURL: 请求地址
//2.NSURLRequest:请求对象(和NSURLConnection使用的请求对象一样的)
//3.NSURLSession:发送请求,并且获取从服务器返回的数据
//4.NSURLSessionConfiguration:会话模式
//a.defaultSessionConfiguration 默认会话模式(相当于NSURLConnection),会缓存请求相关的数据
//b.ephemeralSessionConfiguration 瞬时会话模式(不会做缓存)
//c.backgroundSessionConfigurationWithIdentifier 后台模式
//5.NSURLSessionTask:
//a.b.NSURLSessionDataTask数据任务(一般的数据请求,比如:获取json数据)
//b.NSURLSessionDownLloadTask 下载任务 (下载文件,比如:下载图片\下载音频视频\下载zip\下载安装包…)
//c.NSURLSessionUploadTask 上传任务(比如:上传图片\上传音频视频\上传zip\上传安装包…)
#pragma mark - 通过协议方法获取服务器返回的数据
-(void)test2{
//1.创建请求路径
NSURL* url = [NSURL URLWithString:@”http://www.1000phone.net:8088/app/iAppFree/api/limited.php?page=1&number=4“];
//2.创建请求
NSURLRequest* request = [NSURLRequest requestWithURL:url];
//3.创建会话模式
NSURLSessionConfiguration* congire = [NSURLSessionConfiguration defaultSessionConfiguration];
//4.创建seession
//参数1:会话模式
//参数2:代理
//参数3:协议方法添加的队列
NSURLSession* session = [NSURLSession sessionWithConfiguration:congire delegate:self delegateQueue:[NSOperationQueue mainQueue]];
//5.创建任务
NSURLSessionTask* task = [session dataTaskWithRequest:request];
//6.启动任务
[task resume];
}
mark - DataDelegate
//接收到服务器的响应后会调用的方法
//参数1:委托
//参数2:session中任务
//参数3:响应信息
//参数4:通过这个bolck告诉服务器客户端需不需要接收数据
- (void)URLSession:(NSURLSession )session dataTask:(NSURLSessionDataTask )dataTask
didReceiveResponse:(NSURLResponse *)response
completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler{
NSLog(@”%@”,response);
if (_data == nil ) {
_data = [[NSMutableData alloc] init];
}else{
_data.length = 0;
}

//如果不调用这个bolck或者传入NSURLSessionResponseCance就会取消数据的传输
//如果传入NSURLSessionResponseAllow,允许数据的传输
completionHandler(NSURLSessionResponseAllow);

}
//接收到服务器返回的数据的时候,会调用这个方法
- (void)URLSession:(NSURLSession )session dataTask:(NSURLSessionDataTask )dataTask
didReceiveData:(NSData *)data{
[_data appendData:data];
NSLog(@”接收到数据”);
}
- (void)URLSession:(NSURLSession )session task:(NSURLSessionTask )task
didCompleteWithError:(nullable NSError *)error{
NSDictionary* dic = [NSJSONSerialization JSONObjectWithData:_data options:NSJSONReadingMutableContainers error:nil];
NSLog(@”%@”,dic);
//如若error不为空,说明请求失败:否则数据接收完成
if (error) {
NSLog(@”%@请求失败:”,error);
}else{
NSLog(@”数据接收完成”);
}
}
#pragma mark - 通过block方法获取服务器返回的数据
-(void)test1{
//1.创建请求路径
NSURL* url = [NSURL URLWithString:@”http://www.1000phone.net:8088/app/iAppFree/api/limited.php?page=1&number=4“];
//2.根据url创建请求对象
NSURLRequest* request = [NSURLRequest requestWithURL:url];
//3.创建会话模式
//默认会话模式
NSURLSessionConfiguration* config = [NSURLSessionConfiguration defaultSessionConfiguration];
//4.创建session
NSURLSession* session = [NSURLSession sessionWithConfiguration:config];
//5.创建数据任务
//参数1:需要发送的请求
//参数2:请求结束后会调用的bolck
NSURLSessionTask* task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
//参数1:服务器返回的数据(实体内容)
NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@”%@”,dict);
//参数2:相应信息(状态行和相应头)
NSLog(@”%@”,response);

}];;
//6.启动任务
[task resume];

}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1804次
    • 积分:189
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档