zoukankan      html  css  js  c++  java
  • iOS 网络优化--页面返回的时候取消网络请求

    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.
    }

     

  • 相关阅读:
    剑指Offer-30.连续子数组的最大和(C++/Java)
    剑指Offer-29.最小的K个数(C++/Java)
    UVA 1616 Caravan Robbers 商队抢劫者(二分)
    UVA 10570 Meeting with Aliens 外星人聚会
    UVA 11093 Just Finish it up 环形跑道 (贪心)
    UVA 12673 Erratic Expansion 奇怪的气球膨胀 (递推)
    UVA 10954 Add All 全部相加 (Huffman编码)
    UVA 714 Copying Books 抄书 (二分)
    UVALive 3523 Knights of the Round Table 圆桌骑士 (无向图点双连通分量)
    codeforecs Gym 100286B Blind Walk
  • 原文地址:https://www.cnblogs.com/lcl15/p/9681409.html
Copyright © 2011-2022 走看看