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

     

  • 相关阅读:
    jquery ajax 后台响应成功,返回正确json但不执行success方法,执行error的问题
    bootstrap轮播组件,大屏幕图片居中效果
    mouseover和mouseout事件在鼠标经过子元素时也会触发
    vertical-align的深入学习
    小技巧
    css字体大小设置em与rem的区别
    子元素的margin-top影响父元素原因和解决办法
    JavaScript随机打乱数组
    JavaScript 获取当月天数
    javaScript 的option触发事件
  • 原文地址:https://www.cnblogs.com/lcl15/p/9681409.html
Copyright © 2011-2022 走看看