首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
飞猴阿新
北京石油化工学院 iOS开发
发布于北京
关注
已关注
取消关注
@小生好怕怕:
iOS_AFNetWorking框架分析
网络 — 你的程序离开了它就不能生存下去!苹果的Foundation framework中的NSURLConnection又非常难以理解, 不过这里有一个可以使用的替代品:AFNetworking。AFNetworking 包括了所有你需要与在线资源交互的内容,从web services到文件下载。当你的程序在下载一个大文件期间,AFNetworking还能确保你的UI是可以响应的。今天将从三个简单地任务来实现AFNetWorking的极小部分功能(九牛一毛,冰山一角)。在写案例之前,首先AFNetWorking.h文件添加进入。 任务一:通过AFNetWorking框架下载网络数据 1 //通过AFNetWorking框架下载网络数据 2 //1.先创建AFHTTPSessionManager对象 3 AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithBaseURL:[NSURL URLWithString:@"http://127.0.0.1/userManager/"]]; 4 /** 5 * 参数详解: 6 1.要从网络中的到的文件 7 2.传递参数 8 3.成功执行的操作 9 4.失败执行的操作10 */11 //注意:在cities.json之前不能出现路径“/”,否则会出现异常错误。12 [manager GET:@"cities.json" parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {13 NSArray *provinces =[responseObject objectForKey:@"provinces"];14 for(NSString *province in provinces)15 {16 NSLog(@"%@",province);17 }18 } failure:^(NSURLSessionDataTask *task, NSError *error) {19 NSLog(@"网络获取失败:%@",error);20 }]; 任务二:下拉刷新数据 要实现下拉刷新功能,首先要创建刷新控件 实现刷新控件的事件响应 刷新控件中有两个方法注意: //1.开始刷新 - (void)beginRefreshing NS_AVAILABLE_IOS(6_0); //2.停止刷新 - (void)endRefreshing NS_AVAILABLE_IOS(6_0); 任务三:加载图片的实现 图片的处理过程 1.先从缓存中找是否已经下载相同的图片,如果找到则显示缓存中的图片(根据URL来判断是否是相同的图片) 2.如果没有找到,先显示占位的图片 3.在后台下载图片 4.图片下载完成后,将图片加入缓存,然后显示出来。 为避免给大家看到更多的雷同代码,将任务二、任务三写到一个程序中去拉。 1 #import "ViewController.h" 2 3 @interface ViewController ()<UITableViewDataSource> 4 @property(strong,nonatomic)UITableView *tableView; 5 @property(strong,nonatomic)UIRefreshControl *freshControl; 6 @property(strong,nonatomic)NSMutableArray *datas; 7 @property(strong,nonatomic)NSURL *url; 8 @end 9 10 @implementation ViewController11 12 - (void)viewDidLoad {13 [super viewDidLoad];14 //1.先创建TableView15 self.tableView = [[UITableView alloc]initWithFrame:self.view.bounds];16 self.tableView.dataSource = self;17 [self.view addSubview:self.tableView];18 //创建刷新控件19 self.freshControl = [[UIRefreshControl alloc]initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 100)];20 [self.freshControl addTarget:self action:@selector(reload:) forControlEvents:UIControlEventValueChanged];21 [self.tableView addSubview:self.freshControl];22 // [self.tableView.tableHeaderView addSubview:self.freshControl];23 /**24 * 如果是使用的ViewoController则添加到table内,如果采用的tableViewController,可以添加到self.tableView.tableHeaderView中。25 */26 self.datas = [NSMutableArray array];27 //设置网络连接路径28 self.url = [NSURL URLWithString:[NSString stringWithFormat:@"http://127.0.0.1/userManager/0.png"]];29 [self reload:nil];30 }31 -(void)reload:(UIRefreshControl *)sender32 {33 //添加数据34 for(int i = 0;i<3;i++)35 {36 NSString *string = [NSString stringWithFormat:@"name%d",arc4random_uniform(9)];37 [self.datas addObject:string];38 }39 //刷新表格40 [self.tableView reloadData];41 //结束刷新42 [self.freshControl endRefreshing];43 }44 45 #pragma mark - TableView数据源46 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section47 {48 return self.datas.count;49 }50 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath51 {52 //1.根据reuseindentifier先到对象池中去找重用的单元格53 static NSString *reuseIndetifier = @"myCell";54 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIndetifier];55 //2.如果没有找到需要自己创建单元格对象56 if (cell == nil) {57 cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIndetifier];58 }59 //3.设置单元格对象的内容60 cell.textLabel.text = [self.datas objectAtIndex:indexPath.row];61 //从网络中获取图片,62 [self setImageWithURL:self.url placeholderImage:[UIImage imageNamed:@"profile-image-placeholder"] setCell:cell];63 return cell;64 }65 -(void)setImageWithURL:(NSURL *)url66 placeholderImage:(UIImage *)placeholderImage setCell:(UITableViewCell *)cell67 {68 //设置图片占位符69 [cell.imageView setImage:placeholderImage];70 //对路径进行发送请求71 NSURLRequest *request = [NSURLRequest requestWithURL:self.url];72 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError)73 {74 /**75 * 如果从网络中下载图片成功,则显示下载的图片,否则使用占位符。76 */77 if (connectionError)78 {79 [cell.imageView setImage:placeholderImage];80 }81 else82 {83 UIImage *image = [UIImage imageWithData:data];84 [cell.imageView setImage:image];85 }86 }];87 }88 @end 程序运行效果图: 在网络连接中,谁人愿意使用自己的手机流量尝试下载一个较大的文件啊!那不是傻子吗?但是如果在下载时,自己却没有发现使用的不是WIFI而是自己的流量时,那时真是痛苦无泪啊!看着手机流量一点点第减少。所有,在使用网络之前最好能通过检测网络状态,有一个网络连接提醒。 网络连接状态 #import "ViewController.h"#import "AFNetworking.h"@interface ViewController ()<NSURLConnectionDataDelegate>@end@implementation ViewController#pragma mark - UI方法- (void)viewDidLoad { [super viewDidLoad]; //检测网络状态 [self checkNetworkStatus];}#pragma mark - 私有方法#pragma mark 网络状态变化提示-(void)alert:(NSString *)message{ UIAlertView *alertView=[[UIAlertView alloc]initWithTitle:@"System Info" message:message delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles: nil]; [alertView show];}#pragma mark 网络状态监测-(void)checkNetworkStatus{ //创建一个用于测试的url NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"]; //HTTP请求操作管理 AFHTTPRequestOperationManager *operationManager=[[AFHTTPRequestOperationManager alloc]initWithBaseURL:url]; //根据不同的网络状态改变去做相应处理 [operationManager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { switch (status) { case AFNetworkReachabilityStatusReachableViaWWAN: [self alert:@"2G/3G/4G网络连接."]; break; case AFNetworkReachabilityStatusReachableViaWiFi: [self alert:@"WiFi网络连接."]; break; case AFNetworkReachabilityStatusNotReachable: [self alert:@"网络不可达."]; break; default: [self alert:@"网络信号不可识别."]; break; } }]; //开始网络信号监控 [operationManager.reachabilityManager startMonitoring];}@end 运行效果图:
点赞 0
评论 0
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
10-11 23:24
已编辑
深圳大学 Java
秋招招商银行 TimeLine
先说说基本情况,主包bg是26双非本,之前在字节剪映前端岗位实习过一段时间,秋招投递的是后端岗位在8月8号投递的招商银行,等了将近一个月才收到的面试时间线:9.1:性格测评 & 笔试9.8:一面9.16:二面 & HR面10.11:意向面试地点:线上 & 深圳线下
我的秋招日记
点赞
评论
收藏
分享
今天 19:40
已编辑
门头沟学院 Java
困状态不好的一次
介绍实习Redis架构redis集群如何路由 和 扩容缩容的?rpc和http区别 rpc是服务间 Https c/s架构一般rpc设计,我提到了负载均衡、序列化、通信协议、注册中心追问: 负载均衡如何监控节点down机补充:我没提到rpc可能存在链式调用情况,追问链式调用会发生什么问题 我:服务雪崩服务雪崩如何解决 有用过什么框架嘛 sentinel一个用户ID如何在rpc链式调用中传递呢进程编程做过嘛 举例子我说了僵尸进程 ,追问如何解决僵尸进程 我说kill - 9 编写代码及时wait掉子进程concurrenthashmap没有提到CAS 只说了sychronized矩阵dp[i][...
找工作中的小确幸
点赞
评论
收藏
分享
今天 15:27
门头沟学院 集成电路IC设计
趁早找对象
关于面包和爱情哪个重要这个问题,我认为要趁早为终身大事考虑下。看到抖音有个正在读博的博主分享的话,感觉很有道理。他是21年读的研,读的是个2,刚进学校的时候,因为那时候是保进来的,导师虽然没要求提前进组,但是也有暑期的任务指标,也算是忙忙碌碌的混到开学,那个时候一门心思就是想着,该如何做好自己的方向,什么点能够被结合,实验室的资源能够支持做哪些仿真,什么时候发期刊,研二前发论文评国奖,好进国企。读的专硕,实习该怎么办,老师会不会让他出去?还有一门心思不是竞赛,就是考虑考公还是考编。研一那一年,非常的焦虑,想着论文到了毕业就是废纸,但有不得不搞。但到了研二之后,一切开始变得习惯,方向也随着项目来...
面包vs爱情,怎么选?
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
26国考公告出炉,放宽到38岁意味着什么
5038
2
...
京东官宣发布新车,会有新的HC吗?
4353
3
...
害,找工作哪有不上当的!
4329
4
...
从摆烂到OC,嵌入式人的血泪史
4301
5
...
懂车帝二面 2025.10.11 1h32min
3550
6
...
牛牛求救🆘,不敢梭哈后端第二技能点怎么搭配
3100
7
...
下一站回家
2741
8
...
27届速通第一段前端实习后续--节孝子启动!
2635
9
...
双非秋招大厂time line参考
2536
10
...
找到靠谱的公司,少走些弯路
2367
创作者周榜
更多
正在热议
更多
#
找工作中的小确幸
#
7332次浏览
76人参与
#
秋招踩过的“雷”,希望你别再踩
#
14396次浏览
167人参与
#
深信服秋招来了
#
280440次浏览
2917人参与
#
面包vs爱情,怎么选?
#
15588次浏览
167人参与
#
实习在多还是在精
#
1885次浏览
35人参与
#
发面经攒人品
#
2327216次浏览
32435人参与
#
爱玛科技集团求职进展汇总
#
29543次浏览
208人参与
#
实习下班不想学习,正常吗?
#
2712次浏览
43人参与
#
反问环节如何提问
#
106607次浏览
2001人参与
#
机械求职避坑tips
#
67069次浏览
449人参与
#
校招谈薪一定要知道的事
#
1929次浏览
33人参与
#
你觉得什么岗位会被AI替代
#
3819次浏览
74人参与
#
贝壳求职进展汇总
#
35819次浏览
199人参与
#
机械人值得去的小众企业
#
24090次浏览
54人参与
#
秋招结束之后的日子
#
87948次浏览
985人参与
#
浪潮求职进展汇总
#
17686次浏览
137人参与
#
投格力的你,拿到offer了吗?
#
118899次浏览
686人参与
#
诺瓦星云求职进展汇总
#
219669次浏览
1715人参与
#
新凯来求职进展汇总
#
51777次浏览
131人参与
#
Offer比较,你最看重什么?
#
216303次浏览
1394人参与
#
职场新人体验
#
86641次浏览
611人参与
#
实习教会我的事
#
31613次浏览
274人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务