1.簡述SDWebImage的實(shí)現(xiàn)原理
SDWebImage中為UIView提供了一個分類叫做 WebCache,這個分類同時提供了很多類似的方法,這些最終會調(diào)用一個同時具有optionProgressBlock completionBlock的方法,而這個類最終被調(diào)用的方法會首先檢查是否傳入了placeholderImage以及對應(yīng)的參數(shù),并設(shè)置placeholderImage。
然后,會獲取SDWebImageManager中的單例調(diào)用一個downloadImageWithURL:的方法獲取圖片,而這個manager獲取圖片的過程大體上分為兩部分,它首先會在SDWebImageCache中尋找圖片是否有對應(yīng)的緩存,它會以URL作為數(shù)據(jù)的索引先在內(nèi)存中尋找是否有對應(yīng)的緩存,如果緩存未命中就會在磁盤中利用MD5處理過的Key來繼續(xù)查詢對應(yīng)的數(shù)據(jù),如果找到了,就會把磁盤中的緩存?zhèn)浞莸絻?nèi)存中。
然而,假設(shè)我們在內(nèi)存和磁盤緩存中都沒有命中,那么manager就會調(diào)用它特有的一個SDWebImageDownloader對象的方法downloadImageWithURL:來下載圖片,這個方法會在執(zhí)行的過程中調(diào)用另一個方法addProgressCallback:andCompletedBlock:forURL:createCallback:來存儲下載過程中和下載完成的回調(diào),當(dāng)回調(diào)塊是第一次添加的時候,方法會實(shí)例化一個NSMutableURLRequest和SDWebImageDownloaderOperation,并將后者加入Downloader持有的下載隊(duì)列開始圖片的異步下載。而在圖片下載完成之后,就會在主線程設(shè)置image屬性,完成整個圖像的異步下載和配置。
2.簡述XML和JSON數(shù)據(jù)各有什么優(yōu)勢
(1)XML更適合數(shù)據(jù)定義,數(shù)據(jù)存儲。它對數(shù)據(jù)的表達(dá)使得這個數(shù)據(jù)脫離你程序的上下文仍然存在意義并且可以被解讀。所以XML適合作為配置文件,以及數(shù)據(jù)存儲,存盤文件格式等等。
(2)JSON更適合數(shù)據(jù)傳輸。JSON數(shù)據(jù)體積相對于XML小,對于傳輸而言,雙方必然需要遵循協(xié)商好的協(xié)議,因而JSON對數(shù)據(jù)的表達(dá)并不需要在數(shù)據(jù)傳輸?shù)碾p方以外仍然具有可解讀的意義,只要傳輸?shù)碾p方能讀懂即可。
3.簡述線程和進(jìn)程的聯(lián)系和區(qū)別
定義:
(1)進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨(dú)立單位;
(2)線程是進(jìn)程的實(shí)體,是CPU調(diào)度和分配的基本單位。
關(guān)系:
(1)一個線程可以創(chuàng)建和撤銷另一個線程;
(2)同一個進(jìn)程中的多個線程之間可以并發(fā)執(zhí)行。
區(qū)別:
(1)一個程序至少有一個進(jìn)程,一個進(jìn)程至少有一個線程;
(2)線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高;
(3)進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個線程共享內(nèi)存,從而極大的提高了程序的運(yùn)行效率;?
(4)線程不能獨(dú)立執(zhí)行,必須依存于應(yīng)用程序中,由應(yīng)用程序提供多個線程執(zhí)行控制;
(5)多線程的意義在于一個應(yīng)用程序中,有多個執(zhí)行部分可以同時執(zhí)行。但操作系統(tǒng)不會將多線程看做多個應(yīng)用,來實(shí)現(xiàn)進(jìn)程的調(diào)度和管理及資源分配。
4.簡述NSUserDefaults的使用場景和使用注意事項(xiàng)
NSUserDefaults支持的數(shù)據(jù)類型有:NSNumber(NSInteger/float/double)、NSString、NSData、NSArray、NSDictionary、BOOL,如果你想存儲其他類型的對象,你要將其歸檔并創(chuàng)建一個NSData來實(shí)現(xiàn)存儲。如需數(shù)據(jù)永久保存到NSUserDefaults,只需要簡單地儲存成鍵值對,注意保存時的key的唯一性,如對相同的key復(fù)制則會覆蓋以前的數(shù)據(jù)。