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

     

  • 相关阅读:
    TimeSpan的操作
    List<T>的排序和筛选
    编程中的一些概念
    SVN返回版本
    语音播报
    优化编译器的局限性
    Inline Functions 与它的形式参数和局部变量
    函数的效能 & 指向 Member Functions 的指针与其效能
    虚拟继承下 Virtual Function 的语意
    多重继承下 Virtual Function 的语意
  • 原文地址:https://www.cnblogs.com/lcl15/p/9681409.html
Copyright © 2011-2022 走看看