AFN基本使用

AFN基本使用

简介

  • 框架结构
    • NSURLSession
      • NSURLSessionManager对NSURLSession的封装
      • AFHTTPSessionManager会话管理者
    • 序列化处理Serialization
      • AFURLRequestSerilization请求
      • AFURLResponseSerilization响应
    • 扩展功能
      • AFSecurityPolicy安全
      • AFNetworkReachabilityManager监听
    • UIKit+AFNetworking
      • 下载缓存图片UIImageView+AFNetworking
        • 思考:这个和SDWebImage有什么区别呢?
      • 很多好用的分类

GET请求

  • 创建会话管理者
    • [AFHTTPSessionManager manager]
  • 创建字典保存参数
  • 发送请求
    • [manager GET:parameters:progress:{}success:{}failure:^{}]
      • 参数一:请求路径不包含参数,类型是NSString
      • 参数二:参数,用字典保存参数
      • 参数三:进度回调,发送GET请求不需要进度信息,nil
      • 参数四:网络请求成功之后的回调
        • dataTask:请求任务本身
          • task.response是响应头
        • responseObject:不是响应头,是响应体,内部已经完成了反序列化处理 (已经把JSON转为了OC对象了)
      • 参数五:网络请求失败之后的回调
        • task:请求任务
        • error:错误信息

POST请求

  • 创建会话管理者
    • [AFHTTPSessionManager manager]
  • 创建字典保存参数
  • 发送请求
    • [manager POST:parameters:progress:{}success:{}failure:^{}]
      • 参数一:请求路径不包含参数,类型是NSString
      • 参数二:参数,用字典保存参数
      • 参数三:进度回调,发送GET请求不需要进度信息,nil
      • 参数四:网络请求成功之后的回调
        • dataTask:请求任务本身
          • task.response是响应头
        • responseObject:不是响应头,是响应体,内部已经完成了反序列化处理 (已经把JSON转为了OC对象了)
      • 参数五:网络请求失败之后的回调
        • task:请求任务
        • error:错误信息

使用AFN实现文件下载

  • 创建会话管理者

    • [AFHTTPSessionManager manager]
  • 确定请求路径

  • 创建请求对象

  • 下载

    • [manager downloadTaskWithRequest:progress:destination:completionHandler:
      • 参数一:请求对象
      • 参数二:进度回调
        • NSProgress
        • 计算进度
          • downloadProgress.completedUnitCount/downloadProgress.totalUnitCount;
      • 参数三:destination做URL处理的回调,告诉下载完之后文件写到哪里 ,内部自动做了剪切处理
        • targetPath:文件下载到沙盒中的临时路径
        • response响应头信息
        • 返回值:告诉AFN文件应该剪切到什么地方
        • 怎么把路径转为URL?
          • [NSURL fileURLWithString:]
      • 参数四:完成之后的回调
        • filePath:就是文件最终保存的位置
  • 执行任务

    • [downloadTask resume];
  • 优点:

    • 通过block块集成了下载进度
    • 内部完成了文件剪切处理

使用AFN实现文件上传

  • 不用拼接了
  • 创建会话管理者
  • 发送POST请求上传文件
  • [manager POST:parameters:constructingBodyWithBlock:progress:success:failure:]
    • 参数一:请求路径
    • 参数二:非文件参数,用字典来传
    • 参数三:block块,处理要上传的文件的
      • fromData:遵守AFMultipartFormData协议
        • append有些方法不能用
        • 方式一:appendPartWithFileData:name:fileName:mimeType:
          • 参一:要上传的文件数据
          • 参二:由后台接口规定的file
          • 参三:文件上传到服务器之后,以什么名称保存
          • 参四:文件的二进制数据类型(四种方法获得)image/png
        • 方式二:appendPartWithFileURL:name:filename:mimeType:error:
          • 参一:fileURLWithPath:
          • 参二:file
          • 参三:文件上传到服务器以什么名称保存
          • 参四:文件的二进制数据
        • 方式三:appendPartWithFileURL:name:error:
          • 内部实现
            • 文件名称是拿到文件路径的最后一个节点
            • C语言方法获得mimeType的方法获得mimeType
    • 参数四:进度回调
      • 进度:当前已经完成的/总大小
    • 参数五:成功之后的回调
      • responseObject:响应体,内部把JSON数据转为了OC对象
    • 参数六:失败之后的回调

AFN使用技巧

  • 封装网络请求工具类
    • 工具类依赖AFN
    • 控制器里面发送网络请求的代码用工具类来实现
    • 封装思想

AFN序列化处理

  • 创建会话管理者

    • [AFHTTPSessionManager manager]
  • 创建字典保存参数

  • 发送请求

    • [manager GET:parameters:progress:{}success:{}failure:^{}]
  • 问题一:如果服务器返回的不是JSON数据,而是XML数据怎么处理?

    • 该请求服务器返回的是XML数据,而AFN默认以JSON的方式来处理XML数据
    • 解决:
      • 如果返回的数据是xml,那么应该修改对响应的处理方式为XML
      • manager.responserSerilizer = [AFXMLEParserResponseSerializer serializer]
        • 创建XML解析器
          • (NSXMLParser *)responseObject;
        • 设置代理:parser.delegate = self
        • 开始解析[parser parse]
      • 遵守协议/实现代理方法didStartElement:
  • 问题二:如果服务器返回的既不是JSON也不是XML怎么办?比如对图片发请求(二进制数据)

    • 默认以JSON方式处理
    • 请求失败,怎么解决
      • 如果服务器返回的数据既不是JSON也不是XML,那么就设置为HTTP的解析方式
      • manager.responserSerilizer = [AFHTTPResponseSerializer serializer]
        • imageWithData:
  • 问题三:如果请求的不是图片,而是网页怎么办?

    • 比如对百度发请求
    • 既不是JSON也不是XML使用 AFHTTPResponseSerializer
  • 问题四:以JSON的方式传参数

    • 之前的处理方式:字典
    • manager.requestSerializer = [AFJSONRequestSerializer serializer]

NSURLSession和NSURLConnection对比

  • NSURLSession支持http2.0协议 ios9.0之后
  • NSURLSession在处理下载任务的时候,可以直接把数据下载到沙盒里面
  • NSURLSession支持后台下载|上传
  • 同一个NSURLSession发送多个请求,只需要建立一次连接(复用TCP)
  • NSURLSession提供了全局的session并且可以统一配置,使用更加方便
  • NSURLSession下载的时候是多线程异步处理的,效率更高

总结

  • 文件下载
    • NSURLSessionDataTask - 离线断点下载(断点续传)
    • NSURLSessionDownloadTask -- 缺点:无法离线断点下载
  • 文件上传
  • AFN基本使用
    • GET|POST
    • 下载|上传
    • 工具类|序列化
    • NSURLSession|NSURLConnection对比

AFN监测网络状态改变

  • 网络状态改变
    • 3G/Wifi的切换
    • AFNetworkReachabilityManager
  • 创建一个网络状态监听管理者
    • AFNetworkReachabilityManager sharedManager
  • 监听状态改变
    • [manager setReachabilityStatusChangeBlock:^{}]

      • status:
        • Unkown:网络状态未知
        • NotReachable:没有网络
        • ViaWWAN:蜂窝网络
        • ViaWiFi :wifi
    • 开启网络状态监听者

      • startMonitoring真机演示
      • iTools
        • 以前可以通过iTools拿到应用,对应用做一些操作,现在要拿到应用的数据要花钱,拿不到应用的包
        • 我的iphone应用
        • finder中显示 .ipa
        • 归档实用工具打开,可以拿到图片数据,显示包内容
        • 开发中,需要提测,提测的时候测试部门一般会提供一些测试机,提测的时候,怎么把项目运行到测试机上呢?
          • 提测的时候会要求存档,打包成ipa包,用iTools安装
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • 1.AFN使用技巧 1.在开发的时候可以创建一个工具类,继承自我们的AFN中的请求管理者,再控制器中真正发请求的代...
    YSL一路行走阅读 1,186评论 1 3
  • 1.在开发的时候可以创建一个工具类,继承自我们的AFN中的请求管理者,再控制器中真正发请求的代码使用自己封装的工具...
    红楼那一场梦阅读 3,407评论 2 3
  • 1.请简单说明多线程技术的优点和缺点? 优点能适当提高程序的执行效率能适当提高资源的利用率(CPU/内存利用率) ...
    彼岸的黑色曼陀罗阅读 404评论 0 2
  • 全称是AFNetworking,是对NSURLSession的一层封装 虽然运行效率没有ASI高,但是使用比ASI...
    翻这个墙阅读 979评论 7 4
  • 我是被动做上小混混的。进入高中之前的读书生涯都有我妈妈和舅舅的校长身份罩着,没受过高年级同学的欺负。然而在这所高...
    释迦烦了阅读 433评论 0 2