1. runtime
和runloop
的區別
1.1 runtime
1.2 runloop
相關
2. SDWebImage
相關
2.1 查找url對應的圖片緩存是否存在
2.2 TableViewCell
複用加載圖片的處理
2.3 針對同一圖片連接的不一樣圖片的處理
3. AFNetworking
2.0和3.0的區別web
runtime
和runloop
的區別runtime
runloop
App
中的各種事件(觸摸事件、定時器事件等)do-while
循環,在這個循環內不斷地處理各類任務緩存
注意網絡
一個線程對應一個runloop
,採用字典存儲,線程號爲key,runloop
爲value;併發
主線程的runloop默認已經啓動,子線程的runloop須要手動啓動。oop
runloop在第一次獲取時建立,在線程結束時銷燬。性能
SDWebImage
相關UIImage *defaultImg = [UIImage imageNamed:@"defaultimage"]; NSString *urlStr = @"http://n.sinaimg.cn/edu/transform/20160505/pe7k-fxryhhu2274915.png"; //查找對應的圖片緩存,key爲url UIImage *originalImg = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:urlStr]; if (originalImg) { imgView.image = originalImg; } else { [imgView sd_setImageWithURL:[NSURL URLWithString:urlStr] placeholderImage:defaultImg]; }
TableViewCell
複用加載圖片的處理因爲cell的複用機制,在咱們加載一個cell的時候,ImageView數據源開啓一個下載任務並返回一個Image,當cell重用時,其數據源又會開啓一個下載任務下載新的Image,但關聯的對象是同一個imageView,這個時候直接setImage
就會發生錯亂。url
SDWebImage
的處理是:線程
LIFO
(last in,first out)策略的,具體是在添加下載任務的時候,將上次添加的下載任務添加依賴爲新添加的下載任務。不少App裏面用戶頭像的url用的都是同一個,因此可能就致使明明已經更新了頭像,可是顯示的圖片仍是原來的,這是由於修改頭像後,圖片的url是不變的,而默認狀況下,SDWebImage對相同的url是優先使用緩存的,所以得加option
設置。code
[_userFaceLogo sd_setImageWithURL:[NSURL URLWithString:userDto.userImgUrl] placeholderImage:[UIImage imageNamed:@"head portrait"] options:SDWebImageRefreshCached];
SDWebImageRefreshCached
是專門用來處理相同url,圖片不一樣的狀況的。orm
AFNetworking
2.0和3.0的區別在3.0
以前,底層是經過NSURLConnection
來實現的。在3.0
以後,也就是在iOS9
以後,蘋果使用NSURLSession
來管理網絡請求,棄用了NSURLConnection
.