澳门威利斯人_威利斯人娱乐「手机版」

来自 办公软件 2020-04-16 19:41 的文章
当前位置: 澳门威利斯人 > 办公软件 > 正文

威尼斯娱乐iOS开发之AFN的基本使用,iOS网络请求

有关iOS相关本事的博客特别特别多了,没有好的始末也不想写,近来在迭代公司项目版本,对于那几个主题材料也想了非常久,看了累累临近的篇章,决定记录一下。互联网乞请,是客商端支出中三个相当的重大的模块,关于此方面须要理解的东西也是非凡多的,此篇小说仅介绍本身用过的关于框架。

iOS开拓之AFN的主干接纳,ios开拓afn

本篇将从三个方面前蒙受iOS开辟中平日选用到的AFNetworking框架进行教学:

一、什么是 AFN
二、为什么要使用 AFN
三、AFN 怎么用
三、AFN和ASI的区别

 

AFNetworking

若果是做iOS开辟的应当都以领略这几个框架的,有多优良小编就不赘述了。自iOS9之后苹果弃用了NSUKugaLConnection只用NSURubiconLSession,所以AFN从3.0本子开始就删除了依靠NSU奔驰M级LConnection API的享有支持,基于NSU奥迪Q3LSession框架以至NSOperation进行的卷入开辟。

既然如此用的是第三方框架,那么必然会有一部分部限性。框架的迭代改过都会潜移默化大家的代码,所以尽也许解耦,日常大家都会独自的写八个互联网乞求工具类对框架实行打包。那样纵然框架纠正了,也只须求改变工具类相关代码。

    1. 新建网络央求工具类,实例化AFHTTPSessionManager。形似如下 :
  (instancetype)sharedInstance{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _mutParamares = [NSMutableDictionary dictionary]; _manager = [AFHTTPSessionManager manager]; _manager.requestSerializer = [AFHTTPRequestSerializer serializer]; _manager.requestSerializer.timeoutInterval = 30.0f; [AFNetworkActivityIndicatorManager sharedManager].enabled = YES; _manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html", @"text/json", @"text/plain", @"text/javascript", @"text/xml", @"image/*", nil]; });}

五个须求小心的主题素材:第一,这里的网络诉求工具类是叁个单利,为何要用单利呢? [AFHTTPSessionManager manager]钉住到这一个格局里,会见到再次回到的manager并非单利,假诺每一回须求都实例化二个manager的话,那么有极大希望以致内部存款和储蓄器泄漏。第二,不经常候央求失利的由来是AFN扶植的response类型和服务器重临给大家的品种差别,需求改进AFN的源码实行修改,但用Cocoapods来管理三方框架,pod update之后更正的代码又会被重新恢复生机设置。这时,就可以透过acceptableContentTypes属性来依据须求安装。

  (instancetype)manager { return [[self alloc] initWithBaseURL:nil];}

也足以由此requestSerializer属性设置恳求头相关的新闻。如:

 [self.manager.requestSerializer setValue:@"" forHTTPHeaderField:@""];
  • 2.常用的网络央浼类型。那是对外的API,外界通过调用那些接口完成相关的互连网诉求。当然你也得以依附本身的内需拆穿相关的API。相应的接口完结比较容易。具体的逻辑还应依照作业供给在外表达成。对于文本的操作,如图片的上传,可参谋代码如下。

    威尼斯娱乐 1image.png

 // 上传多张图片 [_manager POST:url parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { for (UIImage *image in imgArray) { UIImage *resizeImage = image.reSizeImage; NSData *data = UIImagePNGRepresentation(resizeImage); [formData appendPartWithFileData:data name: @"file" fileName:[NSString stringWithFormat:@"img%ld.png",i] mimeType:@"image/png"]; }];

上传多张图片的时候,依照须求可对图纸展开裁剪和缩短。关于上传的速度能够透过progressBlock再次回到在对应的UI上开展显示,进程的计算公式如下。

 processBlock(progress.completedUnitCount / progress.totalUnitCount);
    1. 监测网络状态。
 AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager]; [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { switch  { case AFNetworkReachabilityStatusUnknown: break; case AFNetworkReachabilityStatusNotReachable: break; case AFNetworkReachabilityStatusReachableViaWWAN: break; case AFNetworkReachabilityStatusReachableViaWiFi: break; } }]; [manager startMonitoring];

以上是基于AFNetworking的互联网央求。下边说的这种网络恳求情势是集约式的互联网需要,也等于独具的API都调用的是以此工具类。还也是有一种互联网须要方式是离散式的,也正是每三个API都有和好相应的类。

一、什么是 AFN

AFN 全称为 AFNetworking,是贰个营造与在 NSU奥德赛LConnection、NSOperation 以至别的熟知的 Founation 技能之上的一个第三方网络框架。

 


YTKNetwork

以此框架也是基于AFNetworking进行的再次卷入,适用于规模极大的项目中。YTKNetwork是离散式的互联网央求格局,如上所述,每二个须要都对应一个对象,可遵照需求对相应的乞求实行定制化。别的YTKNetwork扶持批量网络伏乞发送并安装统一次调、援助相互信赖的互连网需要等等功效。

    1. 同上,不提出直接利用第三方,自身写三个BaseRequest类世襲YTKRequest,在这里个类里面完结下边那一个主意。那么些措施是负有乞求的Response。
- startWithCompletionBlockWithSuccess:(YTKRequestCompletionBlock)success failure:(YTKRequestCompletionBlock)failure{}
    1. 写二个互连网要求配置类。在前后相继运维的时候经过YTKNetworkConfig配置互联网央求。如baseUrl参数等。通过YTKNetworkAgent设置有个别参数,如上边提到的acceptableContentTypes参数。这一个类是实在发起呼吁的类,也是在这里个类中与AFN打交道。
 _config = [YTKNetworkConfig sharedConfig]; _config.baseUrl = BASE_INTERFACE_URL_DEV;

 YTKNetworkAgent *agent = [YTKNetworkAgent sharedAgent]; NSSet *acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/plain", @"text/html", @"text/css", nil]; NSString *keypath = @"jsonResponseSerializer.acceptableContentTypes"; [agent setValue:acceptableContentTypes forKeyPath:keypath];
    1. 以二个现实的API伏乞为例。3.1 新建多少个UserInfoAPI类,继承你写的BaseRequest类。3.2 完毕以下情势。要求的U奥德赛L,和表面毫无干系,没有要求外面传进来。央求的品类,以至倡议的参数。当然,拆解解析也能够在API类内部贯彻。通过在GET方法里面实现多少的转移和剖判。
- (NSString *)requestUrl { return kUserURL;}- (YTKRequestMethod)requestMethod { return YTKRequestMethodPOST;}- (instancetype)requestArgument { return parameter;}

serverRespData是基类自定义的二个参数,是数额过滤之后的response。

 _serverRespData = [self.responseJSONObject objectForKey:@"data"];- (QDZQUseModel *)user { // 重写user的get方法。 _user = [QDZQUserEntity yy_modelWithDictionary:[self.serverRespData objectForKey:@"appUser"]]; return _user;}

3.3 如何调用那么些API

  fetchUserInfoSuccess:success failure:(NSError * error))failure { UserInfoApi *api = [[UserInfoApi alloc] init]; [api startWithCompletionBlockWithSuccess:^(__kindof YTKBaseRequest * _Nonnull request) { if  { } } failure:^(__kindof YTKBaseRequest * _Nonnull request) { if  { } }];}

3.4 增加诉求头假诺你须求增添诉求头的话,你能够兑现上边这几个方式。

- (nullable NSDictionary<NSString *, NSString *> *)requestHeaderFieldValueDictionary { return @{@"token" : @""};}

如上,是三种互连网央求情势。关于YTKNetwork框架的源码分析能够看那篇文章。YTKNetwork源码解析

二、为啥要选取 AFN

AFN 对网络央求部分做了很好的包裹,并且具备优质的布局,丰裕的api,以致模块化构建格局,使得应用起来非常轻巧.。

 


三、AFN 怎么用和她的二种选择方法

AFN 重要选拔在2个现象中:

一、发送互联网需要

二、实时监测网络状态

 

AFHTTPRequestOperationManager:内部封装的是 NSUrlConnection,网络央求管理类,用来肩负发送网络诉求,是应用最多的多个类.

AFHTTPSessionManager :内部封装的是 NSUrlSession,互联网乞求管理类,用来担负发送互联网央浼,是采用做多的三个类.

 

多少个互联网央浼管理类定义的 API 完全雷同:

[[AFHTTPRequestOperationManager manager] GET:nil parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    //
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    //
}];

[[AFHTTPSessionManager manager] GET:nil parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
    //
} failure:^(NSURLSessionDataTask *task, NSError *error) {
    //
}];

 

一部分要害的工具类:

AFNetworkReachabilityManager.h :实时监测网络状态更换的保管类.

AFSecurityPolicy.h :HTTPS 须求使用.

AFUHighlanderLRequestSerialization: 数据剖析的时候会使用.

AFHTTPRequestSerializer:   万能深入分析器/对服务器重临的数目不做职分管理.

AFJSONResponseSerializer:  JSON解析器.

AFXMLParserResponseSerializer:  XML解析器.

AFHTTPRequestOperationManager 对NSURLConnection的封装.

 AFHTTPSessionManager 对NSURLSession的封装.

 

一、AFHTTPSessionManager的基本使用手续:

1.开立管理者

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

2.设置处理者的数码分析类型,默以为 json 格式的深入分析,可手动改进为任何门类,如 XML:

manager.responseSerializer = [AFXMLParserResponseSerializer serializer];

 

3.发送网络央求 

NSDictionary *dict = @{@"username":@"zhangsan",@"password":@"zhang"};

[[AFHTTPSessionManager manager] POST:@"http://localhost/login/login.php" parameters:dict progress:^(NSProgress * _Nonnull uploadProgress) {
    //
} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    //
    NSLog(@"responseObject:%@",responseObject);

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    //
    NSLog(@"error:%@",error);
}];

[[AFHTTPSessionManager manager] GET:@"http://localhost/login/login.php" parameters:dict progress:^(NSProgress * _Nonnull downloadProgress) {

    NSLog(@"下载进度:%@",downloadProgress);

} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

    NSLog(@"responseObject:%@",responseObject);

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

    NSLog(@"error:%@",error);
}];

 

 3.1 首先要明了发送的是怎么样项目标央求(GET/POST/HEAD...State of Qatar

 

 3.2 AFN 3.0后头的互联网接口相比较从前的网络接口多了二个参数:网络进程.

 参数:

     1. urlString: 网络接口地址.

     2. parameters: 参数词典.key:服务器收到普通参数的key值,value正是参数内容.

     3. progress: 互连网速度

     4. success: 成功回调

     5. failure: 失利回调

 

 3.3 AFN依据 response.MIMEType 来判断服务器重返数据的类型. 要是类型不相称,不过又是JSON数据,技术方案:

     1.改观拆解分析器类型为:万能拆解深入分析器 ---> 手动剖析JSON

        manager.responseSerializer = [AFHTTPResponseSerializer serializer];

     2.改动评定准则的品类,以使类型相称,acceptableContentTypes默许景况下无 text/plain 类型

        manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/plain",nil];

     注: 若无利用第三方框架(CocoaPods卡塔尔来管理第三方框架,能够一向退换第三方框架的源代码.

     日常在支付中,不要轻松改换第三方源码.

本文由澳门威利斯人发布于办公软件,转载请注明出处:威尼斯娱乐iOS开发之AFN的基本使用,iOS网络请求

关键词: 澳门威利斯人 IOS 框架 网络