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

 

转载于:https://www.cnblogs.com/wxm5558/p/5456793.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值