zoukankan      html  css  js  c++  java
  • NSURLProtocol简介

    最近同事在做一个事情,用NSUrlProtocol截取UIWebView下载的webp图片,然后转化为png图片

    由于UIWebview里面不能用webp格式的图片,而用webp可以节省流量,所以用了这个“曲线救国”的方式

    结合网络上的一个例子raywenderlich 对NSUrlProtocol有个基本的认识。

    NSURLProtocol是一个抽象类,不能直接实例化,需要做一个subclass

    这里面要注意,有一个url请求就会有一个NSURlProtocol的实例

    所以一个NSURLProtocol里有一个NSURLConnection,一个NSMutableData,存储数据

     重写startloading方法是在系统帮忙起的一个线程里,这个nsurlprotocol的实例也运行在这个线程里

    通过同事踩过的坑了解到这个线程里面可能自定义了一些runloopmode,除了commonloopmode之外的mode

    NSMutableArray *calculatedModes;
        NSString *currentMode;
        calculatedModes = [NSMutableArray array];
        [calculatedModes addObject:NSDefaultRunLoopMode];
        currentMode = [[NSRunLoop currentRunLoop] currentMode];
        if ( (currentMode != nil) && ! [currentMode isEqual:NSDefaultRunLoopMode] ) {
            [calculatedModes addObject:currentMode];
        }
        self.modes = calculatedModes;
    

      后面的回调都要在这个mode上执行

        [self performSelector:@selector(exec:) onThread:self.clientThread withObject:[block copy] waitUntilDone:NO modes:self.modes];
    

      记录后续注意,一旦是系统创建的线程,都要防止新建线程里面有自定义mode

  • 相关阅读:
    leetcode 第二题Add Two Numbers java
    二叉树中的那些常见的面试题(转)
    运行的指令
    Python常见经典 python中if __name__ == '__main__': 的解析
    软件测试基本概念
    JAVA Android王牌教程
    17个新手常见Python运行时错误
    QTP
    链表有关的常见面试题
    Robot Framework and Ride
  • 原文地址:https://www.cnblogs.com/wxm5558/p/5456793.html
Copyright © 2011-2022 走看看