iOS 網絡優化--頁面返回的時候取消網絡請求

1.頁面返回的時候,將取消網絡請求。網絡

  場景應用:在一個界面進行多個請求的時候,用戶有可能在網路請求沒有完成時點擊了返回按鈕,session

此時ViewController不會立刻銷燬,要等到網絡請求返回並執行完畢block後纔會銷燬ViewController。atom

  場景應用:在流程界面獲取關聯流程數據的條數,在流程界面請求完數據後將數據傳過去,若沒有spa

完場,則在關聯流程界面再次請求數據,須要將上一界面的網絡請求取消rem

  

#import <UIKit/UIKit.h>it

@interface BaseViewController : UIViewControllerio

//記錄將須要在退出ViewController取消的請求
- (void)addSessionDataTask:(NSURLSessionDataTask *)task;table

//移除已經請求成功的請求
- (void)removeSessionDataTask:(NSURLSessionDataTask *)task;import

//取消全部的請求
- (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.
}

相關文章
相關標籤/搜索