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

     

  • 相关阅读:
    CollectionView Header And Footer 的使用
    UICollectionView 的添加自定义高度的区头
    利用SDWebImage 清理缓存
    iOS tableView 中 UITableView中UITableViewStyleGrouped和UITableViewStylePlain的区别
    关于tableview的分割线隐藏问题
    改变输入框的placehould的颜色 和边框颜色
    将代码在有xib得情况下设置到最底层(即执行顺序不是先执行xib) 将图片毛玻璃状态
    通知监听键盘高度变化 自适应键盘高度
    iOS 定义枚举
    iOS 快速存储到本地
  • 原文地址:https://www.cnblogs.com/lcl15/p/9681409.html
Copyright © 2020-2023  润新知