您的位置:首页 > 游戏 > 游戏 > 上海游戏公司排名_什么平台可以发网推广_百度竞价排名广告定价_网站管理系统

上海游戏公司排名_什么平台可以发网推广_百度竞价排名广告定价_网站管理系统

2025/1/8 20:09:27 来源:https://blog.csdn.net/2301_80253909/article/details/143104470  浏览:    关键词:上海游戏公司排名_什么平台可以发网推广_百度竞价排名广告定价_网站管理系统
上海游戏公司排名_什么平台可以发网推广_百度竞价排名广告定价_网站管理系统

iOS学习

  • 前言
  • 原生网络请求
  • 使用AFNetworking库进行网络请求
    • 具体使用
  • 单例创建的原因
    • 单例使用
  • 总结

前言

我们之前学习了通过OC原生内容进行网络申请,AFNetworkikng第三方库的使用,可以极大地简化网络申请的代码量。


原生网络请求

网络请求主要分为上面五个步骤,下面直接给出代码:

  • 创建请求地址
  • 创建请求类
  • 创建会话
  • 根据会话创建任务
  • 启动任务
-(void)creatURL
{//创建请求地址NSString *urlString1 = [NSString stringWithFormat:@"https://devapi.qweather.com/v7/weather/3d?location=%@&key=你的key",self.array_city[self.flag]];urlString1 = [urlString1 stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];NSURL *url1 = [NSURL URLWithString:urlString1];//创建请求类NSURLRequest *request1 = [NSURLRequest requestWithURL:url1];NSURLSessionConfiguration *config1 = [NSURLSessionConfiguration defaultSessionConfiguration];//创建会话NSURLSession *session1 = [NSURLSession sessionWithConfiguration:config1 delegate:self delegateQueue:[NSOperationQueue mainQueue]];//根据会话创建任务NSURLSessionTask *task1 = [session1 dataTaskWithRequest:request1];self.datatask01 = task1;//启动任务[task1 resume];  
}//接受服务器响应
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
{NSLog(@"didReceiveResponse");if(dataTask == self.datatask01) {if (self.data1 == nil) {self.data1 = [[NSMutableData alloc] init];} else {self.data1.length = 0;}}//允许数据接受completionHandler(NSURLSessionResponseAllow);
}//接收到数据,该方法会被调用多次-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{NSLog(@"didReceiveData");if (dataTask == self.datatask01) {[self.data1 appendData:data];}
}//数据请求完成或者请求出现错误调用的方法
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{NSLog(@"didCompleteWithError");// 在 URLSession:task:didCompleteWithError: 方法中if (task == self.datatask01) {if (error == nil) {NSMutableDictionary *dictBianYi = [NSJSONSerialization JSONObjectWithData:self.data1 options:kNilOptions error:nil];NSMutableArray *arrValue = [[NSMutableArray alloc] init];arrValue = dictBianYi[@"daily"];[self.arrWeNeed addObjectsFromArray:arrValue];} else {NSLog(@"errol = %@",error);}}
}

使用AFNetworking库进行网络请求

相比于我们自己实现网络请求,使用AFNetworking让网络请求更简便

我们并不需要自己操作NSURLNSURLRequestNSURLSession,也不需要实现Task回调、调用resume
我们只需要实现下面一段代码即可:
请添加图片描述

  • 第一个参数是存放我们的URL,也就是网络请求的地址。
  • 第二个参数则是我们要发送的请求的查询数据,在get请求中我们一般放在URL中间,这里注意下在POST请求,我们需要使用一个字典来进行一个请求。
  • 第三个参数则是header,在大部分请求中我们是不需要的,但是在部分要求比较严格的API中,可能就需要运用到这个参数
  • 第四个参数是一个可以选择的块,一般用于大文件的下载中
  • success则是请求成功后回调块,failure则是请求失败后的回调块

具体使用

GET请求为例:

- (void)dataLoader {[[AFHTTPSessionManager manager] GET:@"https:/news-at.zhihu.com/api/4/story-extra/9776246" parameters:nil headers:nil progress:^(NSProgress * _Nonnull downloadProgress) {//} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {NSLog(@"%@",responseObject);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(@"error:%@",error);}];
}

请添加图片描述

单例创建的原因

通常在一个项目中,我们需要多次进行网络申请。当我们在不同页面都创建对象时,会额外耗费很多内存。因此通过一个单例统一实现网络申请,可以节省内存空间,减少代码量便于维护。

单例使用

@implementation Mangerstatic Manger *mangerSington = nil;+ (instancetype)sharedSingleton {static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{mangerSington = [[super allocWithZone:NULL] init];});return mangerSington;
}+ (instancetype)allocWithZone:(struct _NSZone *)zone {return [Manger sharedSingleton];
}- (id)copyWithZone:(NSZone *)zone {return [Manger sharedSingleton];
}- (void)NetWorkWithData:(void(^)(Model *testModel))success andError:(void(^)(NSError *error))failure {AFHTTPSessionManager* manager = [AFHTTPSessionManager manager];NSString* str = @"https:/news-at.zhihu.com/api/4/story-extra/9776246";[manager GET:str parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {Model* model = [Model yy_modelWithJSON:responseObject];success(model); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {failure(error);}];
}

使用GCD加锁保证线程安全。
在ViewController中,我们调用该单例模式

#import "ViewController.h"
#import "Manger.h"
#import "Model.h"
@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];id manger = [Manger sharedSingleton];[manger NetWorkWithData:^(Model *testModel) {NSLog(@"%@", [Model yy_modelToJSONString]);} andError:^(NSError *error) {NSLog(@"error:%@", error);}];
}@end

打印结果:
请添加图片描述

总结

AFNetworking作为一个高效的第三方库,简化了网络申请的代码量。使用起来十分便捷。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com