iOS適配https(二)-- 黑魔法簡(jiǎn)單適配SDWebImage

前言

繼續(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è)試

上一篇:

iOS適配https(一) -- AFNetworking

相關(guān)參考:

iOS 遷移到HTTPS(自建證書+單向驗(yàn)證+AF3.0+WKWebView+SDWebImage)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前不久做了一個(gè)生成快照的需求,其中用到 SDWebImage 來(lái)下載圖片,在使用該框架的過(guò)程中也遇到了一些問題,索...
    ShannonChenCHN閱讀 14,299評(píng)論 12 241
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,315評(píng)論 4 61
  • 技術(shù)無(wú)極限,從菜鳥開始,從源碼開始。 由于公司目前項(xiàng)目還是用OC寫的項(xiàng)目,沒有升級(jí)swift 所以暫時(shí)SDWebI...
    充滿活力的早晨閱讀 12,841評(píng)論 0 2
  • 月亮與六便士,應(yīng)該算是通俗讀物,很多場(chǎng)合被中國(guó)讀者討論或評(píng)判。即使未通讀全本,也能對(duì)書中內(nèi)容說(shuō)個(gè)大概,但又怎能不仔...
    another瓊閱讀 204評(píng)論 0 0
  • 困難一:我剛中級(jí),年紀(jì)很輕,想做件事兒,前任加現(xiàn)任為了各自的目的,給了我個(gè)領(lǐng)頭的機(jī)會(huì)。前任是給機(jī)會(huì)的恩人,但是技...
    樹蔭下的休憩閱讀 284評(píng)論 0 0

友情鏈接更多精彩內(nèi)容