前言
繼續(xù)上篇的篇章。上篇講述了SSL證書的配置以及AFNetworking的單向驗(yàn)證。這里我們講解一下SDWebImage的配置。
SDWebImage本身是支持https的,所以我們要做的工作量并不是很大。
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;
options:SDWebImageAllowInvalidSSLCertificates
設(shè)置即可
方法一
這種方法是最笨的,那就是逐個(gè)替換,將所有用到sdwebimage方法的地方全都設(shè)置一遍,效率最低。屬于大改項(xiàng)目。
方法二
直接到UIImageView+WebCache.m方法中將用到的幾個(gè)方法都改動(dòng)一下。
- (void)sd_setImageWithURL:(NSURL *)url {
[self sd_setImageWithURL:url placeholderImage:nil options:SDWebImageAllowInvalidSSLCertificates progress:nil completed:nil];
}
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder {
[self sd_setImageWithURL:url placeholderImage:placeholder options:SDWebImageAllowInvalidSSLCertificates progress:nil completed:nil];
}
這樣就可以全局設(shè)置好了,但是有個(gè)弊端。如果是使用cocoapods的,那么這樣的修改無(wú)法同步到其他人的工程里,需要每個(gè)人都這樣設(shè)置,而且?guī)焐?jí)的話修改照樣得繼續(xù)。所以這個(gè)方法只是對(duì)于快捷而言試用,長(zhǎng)遠(yuǎn)來(lái)說(shuō)并不方便。所以重點(diǎn)是方法三,使用黑魔法。
方法三 -- 黑魔法
采用黑魔法,并不改動(dòng)三方庫(kù),寫一個(gè)類別即可。長(zhǎng)話短說(shuō),直接上代碼。
UIImageView+JFHttps.h
#import <UIKit/UIKit.h>
@interface UIImageView (JFHttps)
@end
UIImageView+JFHttps.m
#import "UIImageView+JFHttps.h"
#import <UIImageView+WebCache.h>
#import <objc/runtime.h>
@implementation UIImageView (JFHttps)
+ (void)load {
Class myClass = [self class];
// 獲取SEL
SEL originSetImageSel = @selector(sd_setImageWithURL:placeholderImage:options:progress:completed:);
SEL newSetImageSel = @selector(sd_setHttpsImageWithURL:placeholderImage:options:progress:completed:);
// 生成Method
Method originMethod = class_getInstanceMethod(myClass, originSetImageSel);
Method newMethod = class_getInstanceMethod(myClass, newSetImageSel);
// 交換方法實(shí)現(xiàn)
method_exchangeImplementations(originMethod, newMethod);
}
- (void)sd_setHttpsImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
NSLog(@"這里實(shí)現(xiàn)了");
[self sd_setHttpsImageWithURL:url placeholderImage:placeholder options:SDWebImageAllowInvalidSSLCertificates progress:progressBlock completed:completedBlock];
}
@end
UIImageView+JFHttps.h加入到全局
正常調(diào)用SDWebImage的方法即可,其他的都可以不用管,升級(jí)庫(kù)照常升級(jí)。
給個(gè)tip:
https://cdn.pixabay.com/photo/2017/01/18/21/34/cyprus-1990939_1280.jpg
這是一個(gè)https的圖片,方便大家測(cè)試
上一篇:
相關(guān)參考: