• IOS9中使用NSURLConection发送异步网络请求


    IOS9中使用NSURLConection发送异步网络请求

    在ios9中,NSURLConection的sendSync..和sendAsync已经过时。被NSURLSession代替。

    以下蓝色部分参考: https://lvwenhan.com/ios/454.html?utm_source=tuicool

    NSURLSession是十分强大的。再次尝试,两次打印之间间隔了五秒,主线程未阻塞,证明 NSURLSession 为异步执行。

    阻塞 

    尝试多次点击,我们能够看到每五秒执行一次,直到全部执行完毕。

    NSURLSession 采用的是 “异步阻塞” 模型,即所有请求在发出后都进入 2# 线程执行,在 2# 线程内部按照阻塞队列模式执行。初步判断,此阻塞特性为 NSURLSession.sharedSession() 单例模式的结果。

    普通网络请求post:

        NSURL *url=[NSURLURLWithString:@"http://apis.haoservice.com/weather"];

     

        NSMutableURLRequest *request=[NSMutableURLRequestrequestWithURL:url];

        request.HTTPMethod=@"POST";

     

        NSString *data=[NSString  stringWithFormat:@"cityname=%@&key=%@",@"烟台",@"f2b98cebe0514424a1edb4b99c1db95c"];

        request.HTTPBody=[data  dataUsingEncoding:NSUTF8StringEncoding];

     

        NSURLSession *session=[NSURLSession  sharedSession];

        NSURLSessionDataTask *task=[session dataTaskWithRequest:request completionHandler:^(NSData*_Nullable data, NSURLResponse *_Nullable response, NSError *_Nullable error) {

      //在此解析服务器返回的JSON或XML数据

        };

    [task resume];   //这句话一定得要,开始任务的意思。

     

    下载网络请求:

        NSURLSessionDownloadTask *task=[sessiondownloadTaskWithRequest:requestcompletionHandler:^(NSURL *_Nullable location, NSURLResponse *_Nullable response, NSError *_Nullableerror) {

        }];

    [task resume]

    上传文件请求:太复杂,也有这个方法,去头文件找。

     注意:如果想获得下载进度或者断点下载,应该不用block方法,应该设置代理,实现协议方法。

    上述两个方法也有直接写入URL的方法,具体头文件里面找。

     

    iOS开发者交流群:180080550
  • 相关阅读:
    codevs2894、2837、1669、2503、3231
    poj2528
    HDU 1542 Atlantis(矩形面积并)
    Light OJ 1080
    陶哲轩实分析 2.2节 习题试解
    Linux多线程实践(六)使用Posix条件变量解决生产者消费者问题
    css3模糊图片
    高速掌握Lua 5.3 —— I/O库 (1)
    覆盖率測试工具gcov的前端工具_LCOV_简单介绍
    MySQL显示状态信息
  • 原文地址:https://www.cnblogs.com/stevenwuzheng/p/5173560.html
Copyright © 2020-2023  润新知