前言
繼續(xù)上篇的篇章悬荣。上篇講述了SSL證書的配置以及AFNetworking的單向驗證。這里我們講解一下SDWebImage的配置暖呕。
SDWebImage本身是支持https的呈枉,所以我們要做的工作量并不是很大。
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;
options:SDWebImageAllowInvalidSSLCertificates
設置即可
方法一
這種方法是最笨的剩蟀,那就是逐個替換,將所有用到sdwebimage方法的地方全都設置一遍攻旦,效率最低喻旷。屬于大改項目。
方法二
直接到UIImageView+WebCache.m方法中將用到的幾個方法都改動一下牢屋。
- (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];
}
這樣就可以全局設置好了且预,但是有個弊端。如果是使用cocoapods的烙无,那么這樣的修改無法同步到其他人的工程里锋谐,需要每個人都這樣設置,而且?guī)焐壍脑捫薷恼諛拥美^續(xù)截酷。所以這個方法只是對于快捷而言試用涮拗,長遠來說并不方便。所以重點是方法三迂苛,使用黑魔法三热。
方法三 -- 黑魔法
采用黑魔法,并不改動三方庫三幻,寫一個類別即可就漾。長話短說,直接上代碼念搬。
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);
// 交換方法實現(xiàn)
method_exchangeImplementations(originMethod, newMethod);
}
- (void)sd_setHttpsImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
NSLog(@"這里實現(xiàn)了");
[self sd_setHttpsImageWithURL:url placeholderImage:placeholder options:SDWebImageAllowInvalidSSLCertificates progress:progressBlock completed:completedBlock];
}
@end
UIImageView+JFHttps.h加入到全局
正常調(diào)用SDWebImage的方法即可抑堡,其他的都可以不用管摆出,升級庫照常升級。
給個tip:
https://cdn.pixabay.com/photo/2017/01/18/21/34/cyprus-1990939_1280.jpg
這是一個https的圖片首妖,方便大家測試
上一篇:
相關參考: