• AFNetworking 3.0迁移指南要点整理(AFNetworking 3.0 Migration Guide)


    1.基本概述:

    3.0是 AFNetworking 的最新版,移除了对于 NSURLConnection 的 API 的支持,并建议升级到基于 NSURLSession 的 API. AFNetworking 2.x 将继续接受 bug 信息反馈和修复,但是不会再添加新的功能。苹果也在 iOS9 中废止了 NSURLConnection 的使用,所以还是逐渐迁移吧!

    AFNetworking 3.0的系统要求为:iOS 7+, Mac OS X 10.9+, watchOS 2+, tvOS 9, and Xcode 7。

    由于从 NSURLConnection 到 NSURLSession 的变化,里面的内容也发生了许多变化:

    移除的类有:

      • AFURLConnectionOperation
      • AFHTTPRequestOperation
      • AFHTTPRequestOperationManage

    修改的类有:

      • UIImageView+AFNetworking
      • UIWebView+AFNetworking.h
      • UIButton+AFNetworking.h

    如果现在使用的是 AFHTTPRequestOperationManager,需要迁移到 AFHTTPSessionManager,但是以下的类可以重用:

      • securityPolicy
      • requestSerializer
      • responseSerializer

    官方还提供了一个迁移的代码实例(如下)。3.x 版本无论成功失败都会传回一个 NSURLSessionTask,而不是 AFHTTPRequestOperation.

    AFNetworking 2.x

    1 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    2 [manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    3     NSLog(@"JSON: %@", responseObject);
    4 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    5     NSLog(@"Error: %@", error);
    6 }];

    AFNetworking 3.x

    1 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    2 [manager GET:@"http://example.com/resources.json" parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) {
    3     NSLog(@"JSON: %@", responseObject);
    4 } failure:^(NSURLSessionTask *operation, NSError *error) {
    5     NSLog(@"Error: %@", error);
    6 }];

    与 NSURLConnection 对象不同,每个 NSURLConnection 对象共享应用范围的设置如会话管理、缓存策略、Cookie存储以及URL协议等,这些 NSURLSession 对象都可以单独进行配置。使用特定的配置来初始化会话,它可以发送任务来获取数据,并上传或下载文件。

    在AFNetworking 2.0中,使用AFHTTPRequestOperation,有可能创建一个没有额外开销的独立的网络请求来获取数据。NSURLSession则需要更多的开销,为了获得所要请求的数据。

    接下来,将要通过AFHTTPSessionManager创建一个单例,并创建一个任务和启动它。

    AFNetworking 2.x

    NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.json"];
    NSURLRequest *request = [NSURLRequest requestWithURL:URL];
    AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    op.responseSerializer = [AFJSONResponseSerializer serializer];
    [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"JSON: %@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];
    [[NSOperationQueue mainQueue] addOperation:op];

    AFNetworking 3.x

    1 NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.json"];
    2 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    3 [manager GET:URL.absoluteString parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) {
    4     NSLog(@"JSON: %@", responseObject);
    5 } failure:^(NSURLSessionTask *operation, NSError *error) {
    6     NSLog(@"Error: %@", error);
    7 }];

    注意:NSURLSession 不是建立在 NSOperation 基础上的。如果你的 app 高度依赖于 AFURLConnectionOperation 的 NSOperation 方面的功能,那就需要额外在 NSOperation 基础上,对于 AFHTTPSessionManager 进行再次的封装。

    2.跟踪进度

    AFNetworking 3.0 使用 NSProgress 来跟踪 NSURLSessionTasks 的进度,包括上传和下载进度:

      • uploadProgressForTask:
      • downloadProgressForTask:

    通过 KVO,只要响应头包含了 Content-Length,就能够跟踪每个 task 的进度。

    3.UIKit 迁移

    图片下载已经重构,以遵循 AlamofireImage 架构与新的 AFImageDownloader 类。UIButton 与 UIImageView 也是用这个类作为图片下载的代理,并且提供了一些方法,在必要时可以自定义。该类别中,下载远程图片的实际方法没有改变。

    UIWebView的category重构为使用共享的AFHTTPSessionManager来处理网络请求。

    UIAlertView的类目因过时而被废弃。并没有提供UIAlertController类目的计划,因为这是应用程序应处理的逻辑,而不是这个库。

  • 相关阅读:
    maven 构建 war文件&&Glassfish运行+部署war文件+访问(命令行模式)
    配置Glassfish服务器、部署Java web项目、Maven安装配置及JDK版本匹配性问题
    配置apache-maven-3.6.0时所遇到的坑(二)
    配置apache-maven-3.6.0时所遇到的坑(一)
    对Functional Language的认识
    论Injection的前世今生
    简单实现美团手机版应用源码
    WindowsPhone8可缩放图片控件的实现
    MallBuilder 多用户商城管理系统 v5.8.1.1
    Windows Phone 带文本信息的进度条
  • 原文地址:https://www.cnblogs.com/xiayao/p/5296024.html
Copyright © 2020-2023  润新知