建设网站需要注意什么问题,黄页官网,诚信建设网站的作用,郑州seo优化顾问阿亮文章目录 前言OC的网络请求步骤单例封装网络请求使用AFNetworking进行网络请求 前言
在暑假#xff0c;学习了一些简单的网络请求的内容#xff0c;本周学习了AFNetworking的基本使用#xff0c;通过本篇博客进行一个简单的介绍。
OC的网络请求步骤
简单的网络请求主要有… 文章目录 前言OC的网络请求步骤单例封装网络请求使用AFNetworking进行网络请求 前言
在暑假学习了一些简单的网络请求的内容本周学习了AFNetworking的基本使用通过本篇博客进行一个简单的介绍。
OC的网络请求步骤
简单的网络请求主要有以下几个步骤
创建请求地址创建请求类创建会话根据会话创建任务启动任务
下面给出示例代码
-(void) pleaseURL:(NSString*)cityID
{NSLog(现在的时间);NSString* urlString [NSString stringWithFormat:https://devapi.qweather.com/v7/weather/now?location%keyb0e66b20297d457898b69ea7b94ee119,cityID];//创建一个NSURL对象NSURL* url [NSURL URLWithString:urlString];//创建一个NSURLRequest对象NSURLRequest* request [NSURLRequest requestWithURL:url];//创建一个NSURLSession对象用于管理和执行网络请求。NSURLSession* session [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];dispatch_group_enter(group);dispatch_group_async(group, queue, ^{//创建一个NSURLSessionTask对象用于执行特定的网络请求并且使用complotionHander回调来获取请求到的数据和处理错误NSURLSessionTask* task [session dataTaskWithRequest:request completionHandler:^(NSData* data, NSURLResponse* response, NSError* error) {if(error) {}else {//JSON格式的内容转化成为OC中的字典便于我们使用其中的内容。NSDictionary *weatherData [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:error];if(error) {} else {NSDictionary* dic weatherData[now];NSString* str1 dic[obsTime];NSLog(%, str1);NSString* str2 [str1 substringWithRange:NSMakeRange(11, 5)];[self.cityobsTime addObject:str2];[self.citytext addObject:dic[text]];self.icon dic[icon];NSString* str3 [NSString stringWithFormat:%°, dic[temp]];[self.citytemp addObject:str3];NSLog(OK);}}}];[task resume];});
}
这里只进行一个简单的介绍也可以看看笔者的另一篇博客【iOS】APP仿写——天气预报其中介绍的比较详细。
单例封装网络请求
在天气预报仿写中因为有许多个页面每个页面中都需要从网络中请求数据因此笔者就创建多个对象来请求不同的网络数据但是这无疑浪费了内存如果有一个单例专门负责进行网络请求就不会出现这样的问题同时将网络请求逻辑封装到一个单例类中这个类负责创建、管理和发送网络请求。这样你可以将网络请求的相关代码集中在一个地方以提高代码的可维护性和可读性。
//创建一个单例(instancetype)shareManager {if (!managerSington) {static dispatch_once_t onceToken;dispatch_once(onceToken, ^{managerSington [[Manager allocWithZone:NULL] init];});}return managerSington;
} (instancetype)allocWithZone:(struct _NSZone *)zone
{return [Manager shareManager];
}在这里的创建单例中使用了GCD以确保代码块仅被执行一次从而确保线程安全。
static dispatch_once_t onceToken;这是用于确保代码块只执行一次的GCD的dispatch_once_t变量。
dispatch_once(onceToken, ^{ ... })这是GCD的dispatch_once函数它接受一个 dispatch_once_t 变量和一个代码块作为参数。它确保代码块中的代码只会在第一次调用时执行以后的调用会被忽略。
使用AFNetworking进行网络请求
AFHTTPSessionManager* manager [AFHTTPSessionManager manager];NSString* url https://news-at.zhihu.com/api/4/version/ios/2.3.0;[manager GET:url parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {TestYYModel* model [TestYYModel yy_modelWithJSON:responseObject];NSLog(%, [model yy_modelToJSONString]);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(error:%, error);}];下面介绍一下GET请求数据的几个参数
第一个参数是存放我们的URL也就是我们的网络请求的地址。第二个参数是我们要发送的请求的查询数据在get请求中我们一般放在URL中间这里注意下在POST请求时需要使用一个字典来进行一个请求。第三个参数是header在大部分请求中我们是不需要的但是在部分要求比较严格的API中可能就需要运用到这个参数第四个参数是一个可以选择的块一般用于大文件的下载中success则是请求成功后回调块failure则是请求失败后的回调块
打印结果
{msg:【更新内容】\r\n\r\n★ 多图有标记 流量壕忽略\r\n★ 出门前离线 没网也能看\r\n★ 喜欢请好评 不喜快吐槽\r\n★ 萌妹工程师 邮箱在下面\r\nmuazhihu.com\r\n一般人我们不告诉他,status:1,latest:2.5}