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

     

  • 相关阅读:
    理解WebKit和Chromium: Web应用和Web运行环境
    理解WebKit和Chromium: 网页渲染的基本过程
    【闲谈】我的大学
    使用GDAL将下载的Google卫星图像转为带坐标的tif
    Linux下使用GDAL进行开发(automake使用)
    Linux下编译GDAL
    【Unity技巧】统一管理回调函数——观察者模式
    【Unity技巧】使用单例模式Singleton
    【Unity插件】LitJson杂谈
    理解WebKit和Chromium:Chromium资源磁盘缓存
  • 原文地址:https://www.cnblogs.com/lcl15/p/9681409.html
Copyright © 2011-2022 走看看