SDWebImage是一個(gè)第三方框架,用以實(shí)現(xiàn)網(wǎng)絡(luò)圖像的緩存,及處理等功能。
Github的托管下載地址: https://github.com/rs/SDWebImage
SDWebImage默認(rèn)使用磁盤緩存,
在 沙盒/Library/Cache中可以找到帶WebImageCache字眼的目錄,可以找到緩存的圖片
SDWebImage以分類的形式,對(duì)UIKit中的控件擴(kuò)展了網(wǎng)絡(luò)圖片加載接口,使用起來非常方便。
介紹SDWebImage中的幾個(gè)分類:
UIImageView加載網(wǎng)絡(luò)圖片
UIButton加載網(wǎng)絡(luò)圖片
UIImage顯示GIF圖片
并介紹圖片下載進(jìn)度的監(jiān)聽,以及框架內(nèi)實(shí)現(xiàn)流程的簡(jiǎn)要說明
UIImageView+WebCache分類
提供了大量的方法,從網(wǎng)絡(luò)中加載圖片,而且這些操作全部是異步的
- (void)sd_setImageWithURL:(NSURL *)url - (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock
部分方法還提供了占位圖片的操作
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock
部分方法還提供了額外選項(xiàng)用于指定緩存的策略
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock
如:
UIButton+WebCache分類
與UIImageView+WebCache類似,不過UIButton上可以顯示兩個(gè)圖片
背景圖片的加載
- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state - (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock - (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder - (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock - (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options - (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock
圖片的加載
- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state - (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)statecompleted:(SDWebImageCompletionBlock)completedBlock - (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)stateplaceholderImage:(UIImage *)placeholder - (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)stateplaceholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock - (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)stateplaceholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options - (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)stateplaceholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock
UIImage+GIF分類,用于加載gif圖片
這個(gè)分類提供了創(chuàng)建GIF圖片對(duì)象的方法
+ (UIImage *)sd_animatedGIFNamed:(NSString *)name + (UIImage *)sd_animatedGIFWithData:(NSData *)data
有興趣的朋友,可以在框架中看看這兩個(gè)方法的實(shí)現(xiàn)代碼
圖片下載進(jìn)度的監(jiān)聽
很多App中,圖片加載時(shí)會(huì)有一個(gè)加載的進(jìn)度條,UIImageView同樣提供了方法可以連續(xù)獲得圖片的下載進(jìn)度:
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock
如:
SDWebImage的原理分析
SDWebImage支持異步的圖片下載+緩存,加載圖片的基本流程:
顯示placeholderImage,SDWebImageManager根據(jù)URL開始處理圖片
從內(nèi)存緩存中查找圖片是否已被下載,如果找到,則回調(diào)顯示圖片
如果沒有,則在子線程中查找磁盤緩存,,如果找到,則回調(diào)顯示圖片
如果沒有,則開始從URL中下載圖片(使用一個(gè)SDWebImageDownloader下載器對(duì)象)
通過代理方式,得到圖片下載數(shù)據(jù)后,進(jìn)行圖片解碼后,回調(diào)顯示圖片
將圖片保存到SDImageCache中,內(nèi)存緩存和磁盤緩存同時(shí)保存,寫入磁盤的操作也將在子線程中執(zhí)行
SDImageCache在初始化時(shí)會(huì)注冊(cè)一些消息通知
在內(nèi)存警告或退到后臺(tái)時(shí)清理內(nèi)存緩存,
在程序退出時(shí)清理過期圖片
圖片解碼的目的(以空間換時(shí)間)
UIImage的p_w_picpathWithData:每次都會(huì)將Data解壓成圖像,即每次顯示時(shí)都會(huì)有一個(gè)解壓操作
SDWebImageDecoder是先將data資源解壓畫在一張圖片上,顯示時(shí)不再需要解壓
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)站欄目:iOS網(wǎng)絡(luò)開發(fā)(6)網(wǎng)絡(luò)圖片加載開源框架SDWebImage-創(chuàng)新互聯(lián)
文章鏈接:http://www.ekvhdxd.cn/article8/ejdip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、虛擬主機(jī)、企業(yè)建站、手機(jī)網(wǎng)站建設(shè)、建站公司、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容