作者:郭昊天886688 | 来源:互联网 | 2023-09-15 13:05
请求的AFN管理者用weak修饰,因为AFN框架已经在合适处强引用了它,让AFN管理它的生命周期进入该控制器界面的时候,使用框架SVProgressHUD.h并调用方法:[SV
请求的AFN管理者用weak修饰,因为AFN框架已经在合适处强引用了它,让AFN管理它的生命周期
进入该控制器界面的时候,使用框架SVProgressHUD.h 并调用方法:[SVProgressHUD show]提示用户正在加载数据
利用AFNetworking.h框架向服务器发送get请求,回调block里面使用到控制器即(self)需要用__weak typeOf(self) weakSelf = self,并在block里面使用weak修饰的控制器,因为:当网速慢的时候,请求的回调block执行较慢,而当用户退出该控制器的时候,控制器本应该从内存中释放,不用weak修饰,就会造成,控制器对象延迟释放,用weak修饰,当退出该控制器的时候,控制器就会立马释放(没有被block里面强应用),此时weakself就会成为nil空指针
在数据请求成功并成功刷新表格后,要关闭弹框: [SVProgressHUD dismiss];
若是请求失败
- 1.请求超时(失败码-1001,error.code):需利用弹框提示用户请求超时
- 2.AFN文件管理者中途取消了所有请求,直接返回,不用弹框提示
- 3.其余情况,可以弹框提示
当用户离开当前控制器界面的时候,即控制器要从内存中释放的时候,一定要将所有发送的请求取消:[self.manager invalidateSessionCancelingTasks:YES];
当用户离开当前控制器界面时候,要取消弹框,在viewWillDisappear里面[SVProgressHUD dismiss];比在控制器的dealloc方法里面取消,用户体验效果会更好点
#import "XBTagViewController.h"
#import "XBTagCell.h"
#import
#import
#import "XBTag.h"
#import
@interface XBTagViewController ()
@property (nonatomic, strong) NSArray *tags;
#warning 注意manager用weak
@property (nonatomic, weak) AFHTTPSessionManager *manager;
@end
@implementation XMGTagViewController
static NSString * const XMGTagCellId = @"tag";
- (AFHTTPSessionManager *)manager
{
if (!_manager) {
_manager = [AFHTTPSessionManager manager];
}
return _manager;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.title = @"推荐标签";
[self setupTable];
[self loadTags];
}
- (void)setupTable
{
self.tableView.backgroundColor = XMGCommonBgColor;
self.tableView.rowHeight = 70;
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([XMGTagCell class]) bundle:nil] forCellReuseIdentifier:XMGTagCellId];
}
- (void)loadTags
{
[SVProgressHUD show];
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"a"] = @"tag_recommend";
params[@"action"] = @"sub";
params[@"c"] = @"topic";
#warning 注意一般第三方框架里面block里面用到控制器self,要weak该控制器
XMGWeakSelf;
[self.manager GET:XMGRequestURL parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
if (respOnseObject== nil) {
[SVProgressHUD showErrorWithStatus:@"加载标签数据失败"];
return;
}
weakSelf.tags = [XMGTag objectArrayWithKeyValuesArray:responseObject];
[weakSelf.tableView reloadData];
[SVProgressHUD dismiss];
} failure:^(NSURLSessionDataTask *task, NSError *error) {
if (error.code == NSURLErrorCancelled) return;
if (error.code == NSURLErrorTimedOut) {
[SVProgressHUD showErrorWithStatus:@"加载标签数据超时,请稍后再试!"];
} else {
[SVProgressHUD showErrorWithStatus:@"加载标签数据失败"];
}
}];
}
#warning 当控制器挂的时候,取消所有的请求操作:注意:务必要加上这部操作,不会崩掉,如果block里面没有使用弱引用控制器,会延迟挂掉
- (void)dealloc
{
[self.manager invalidateSessionCancelingTasks:YES];
}
- (void)viewWillDisappear:(BOOL)animated
{
#warning 在即将消失界面的时候取消弹框,用户体验更好
[SVProgressHUD dismiss];
[super viewWillDisappear:animated];
}
#pragma mark -
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.tags.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
XMGTagCell *cell = [tableView dequeueReusableCellWithIdentifier:XMGTagCellId];
cell.tagModel = self.tags[indexPath.row];
return cell;
}
@end