1.页面返回的时候,将取消网络请求。
场景应用:在一个界面进行多个请求的时候,用户有可能在网路请求没有完成时点击了返回按钮,
此时ViewController不会马上销毁,要等到网络请求返回并执行完毕block后才会销毁ViewController。
场景应用:在流程界面获取关联流程数据的条数,在流程界面请求完数据后将数据传过去,若没有
完场,则在关联流程界面再次请求数据,需要将上一界面的网络请求取消
#import <UIKit/UIKit.h>
@interface BaseViewController : UIViewController
//记录将需要在退出ViewController取消的请求
- (void)addSessionDataTask:(NSURLSessionDataTask *)task;//移除已经请求成功的请求
- (void)removeSessionDataTask:(NSURLSessionDataTask *)task;//取消所有的请求
- (void)cancelAllSessionDataTask;@end
#import "BaseViewController.h"
@interface BaseViewController ()
@property (nonatomic, strong) NSMutableArray<NSURLSessionDataTask *> *sessionDataTaskMArr;
@end@implementation BaseViewController
- (void)viewDidLoad {
[super viewDidLoad]; // Do any additional setup after loading the view.}- (NSMutableArray *)sessionDataTaskMArr {
if (_sessionDataTaskMArr == nil) { _sessionDataTaskMArr = [NSMutableArray array]; } return _sessionDataTaskMArr;}- (void)addSessionDataTask:(NSURLSessionDataTask *)task {
if (task == nil) { return; } [self.sessionDataTaskMArr addObject:task];}- (void)removeSessionDataTask:(NSURLSessionDataTask *)task {
[self.sessionDataTaskMArr removeObject:task];}- (void)cancelAllSessionDataTask {
if (self.sessionDataTaskMArr.count <= 0) { return; } for (NSURLSessionDataTask *dataTask in self.sessionDataTaskMArr) { if (dataTask.state == NSURLSessionTaskStateRunning || dataTask.state == NSURLSessionTaskStateSuspended ) { [dataTask cancel]; } } [self.sessionDataTaskMArr removeAllObjects];}- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}