iOS - 關(guān)于圖片下載

作者:Mitchell 

一他巨、有關(guān)圖片下載的邏輯

  • 圖片下載
    • 重復(fù)下載問(wèn)題
      • 定義字典保存下載好的圖片
    • 磁盤(pán)緩存問(wèn)題
      • 內(nèi)存沒(méi)有嘗試從磁盤(pán)獲取
    • 阻塞主線程問(wèn)題
      • 新建NSOperationQueue下載圖片
    • 重復(fù)設(shè)置問(wèn)題
      • reloadRowsAtIndexPaths
邏輯1 - 從來(lái)沒(méi)下載過(guò)
 1.查看內(nèi)存緩存是否有圖片
 2.查看磁盤(pán)緩存是否有圖片
 3.查看時(shí)候有任務(wù)正在下載當(dāng)前圖片
 4.開(kāi)啟任務(wù)下載圖片
 5.寫(xiě)入磁盤(pán)
 6.緩存到內(nèi)存
 7.移除下載操作
 8.顯示圖片

 邏輯2 - 已經(jīng)下載過(guò)
 1.查看內(nèi)存緩存是否有圖片
 2.查看磁盤(pán)緩存是否有圖片
 3.使用磁盤(pán)緩存
 4.將圖片緩存到內(nèi)存中
 5.更新UI

 邏輯3 - 已經(jīng)下載過(guò), 并且不是重新啟動(dòng)
  1.查看內(nèi)存緩存是否有圖片
  2.更新UI

二、iOS目錄結(jié)構(gòu)

  • Documents

    • 需要保存由"應(yīng)用程序本身"產(chǎn)生的文件或者數(shù)據(jù)劲装,例如:游戲進(jìn)度凌那、涂鴉軟件的繪圖
    • 目錄中的文件會(huì)被自動(dòng)保存在 iCloud
    • 注意:不要保存從網(wǎng)絡(luò)上下載的文件兼雄,否則會(huì)無(wú)法上架!
  • Caches

    • 保存臨時(shí)文件帽蝶,"后續(xù)需要使用"赦肋,例如:緩存圖片,離線數(shù)據(jù)(地圖數(shù)據(jù))
    • 系統(tǒng)不會(huì)清理 cache 目錄中的文件
    • 就要求程序開(kāi)發(fā)時(shí)励稳,"必須提供 cache 目錄的清理解決方案"
  • Preferences

    • 用戶偏好佃乘,使用 NSUserDefault 直接讀寫(xiě)!
    • 如果要想數(shù)據(jù)及時(shí)寫(xiě)入磁盤(pán)驹尼,還需要調(diào)用一個(gè)同步方法
  • tmp

    • 保存臨時(shí)文件趣避,"后續(xù)不需要使用"
    • tmp 目錄中的文件,系統(tǒng)會(huì)自動(dòng)清理
    • 重新啟動(dòng)手機(jī)新翎,tmp 目錄會(huì)被清空
    • 系統(tǒng)磁盤(pán)空間不足時(shí)程帕,系統(tǒng)也會(huì)自動(dòng)清理
  • 對(duì)目錄的封裝

- (NSString *)cacheDir
{
    // 1.獲取cache目錄
    NSString *dir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    return [dir stringByAppendingPathComponent:[self lastPathComponent]];
}
- (NSString *)documentDir {
    NSString *dir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    return [dir stringByAppendingPathComponent:[self lastPathComponent]];
}

- (NSString *)tmpDir {
    NSString *dir = NSTemporaryDirectory();
    return [dir stringByAppendingPathComponent:[self lastPathComponent]];
}

三、SDWebImage的架構(gòu)

  • SDWebImageManager

    • SDImageCache
    • SDWebImageDownloader
      • SDWebImageDownloaderOperation
  • 默認(rèn)緩存時(shí)間多少

    • 一周
  • 緩存的地址

    • NSString *fullNamespace = [@"com.hackemist.SDWebImageCache." stringByAppendingString:ns];
  • cleanDisk如何清理過(guò)期圖片

    • 刪除早于過(guò)期日期的文件
    • 保存文件屬性以計(jì)算磁盤(pán)緩存占用空間
    • 如果剩余磁盤(pán)緩存空間超出最大限額地啰,再次執(zhí)行清理操作愁拭,刪除最早的文件
  • clearDisk如何清理磁盤(pán)

    • 刪除緩存目錄
    • 新建緩存目錄
  • SDWebImage如何播放圖片

    • 取出gif中每一幀, 生成一張可動(dòng)畫(huà)圖片
  • SDWebImage如何判斷圖片類型

    • 判斷圖片二進(jìn)制前8個(gè)字節(jié)
    • kPNGSignatureBytes[8] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A};

四、關(guān)于 CocoaPods

  • CocoaPods 是什么?

    • CocoaPods 是開(kāi)發(fā) OS X 和 iOS 應(yīng)用程序的一個(gè)第三方庫(kù)的依賴管理工具亏吝。利用 CocoaPods,可以定義自己的依賴關(guān)系 (稱作 pods),并且隨著時(shí)間的變化,以 及在整個(gè)開(kāi)發(fā)環(huán)境中對(duì)第三方庫(kù)的版本管理非常方便
  • CocoaPods 背后的理念主要體現(xiàn)在兩個(gè)方面

    • 在工程中引入第三方代碼 會(huì)涉及到許多內(nèi)容岭埠。針對(duì) Objective-C 初級(jí)開(kāi)發(fā)者來(lái)說(shuō),工程文件的配置會(huì)讓 人很沮喪
    • 在配置buildphases和linker flags過(guò)程中,會(huì)引起許多人為因素的 錯(cuò)誤
    • CocoaPods 簡(jiǎn)化了這一切,它能夠自動(dòng)配置編譯選項(xiàng)
  • CocoaPods的原理

    • 它是將所有的依賴庫(kù)都放到另一個(gè)名為Pods項(xiàng)目中,然后 讓主項(xiàng)目依賴Pods項(xiàng)目,這樣,源碼管理工作都從主項(xiàng)目移到了Pods項(xiàng)目中
    • 1、Pods項(xiàng)目最終會(huì)編譯成一個(gè)名為libPods.a的文件,主項(xiàng)目只需要依賴這個(gè).a 文件即可。
    • 2枫攀、對(duì)于資源文件,CocoaPods提供了一個(gè)名為Pods-resources.sh的bash腳本, 該腳本在每次項(xiàng)目編譯的時(shí)候都會(huì)執(zhí)行,將第三方庫(kù)的各種資源文件復(fù)制到目 標(biāo)目錄中括饶。
    • 3、CocoaPods通過(guò)一個(gè)名為Pods.xcconfig的文件來(lái)在編譯時(shí)設(shè)置所有的依賴和 參數(shù)。
  • CocoaPods安裝

  • 卸載CocoaPods

    • sudo gem uninstall cocoapods
  • CocoaPods使用:

    • 使用時(shí)需要新建一個(gè)名為Podfile的文件
    • 將依賴的庫(kù)名字依次列在文件中
platform :ios
pod'AFNetworking'
  • 注釋事項(xiàng)
    • 1.利用CocoPods管理類庫(kù)后, 以后打開(kāi)項(xiàng)目就用xxxx.xcworkspace 打開(kāi),而不是 之前的.xcodeproj文件
    • 2.每次更改了Podfile文件,你需要重新執(zhí)行一次pod update命令点弯。
    • 3.CocoaPods在執(zhí)行pod install和pod update時(shí),會(huì)默認(rèn)先更新一次CocoPods的 spec倉(cāng)庫(kù)索引僚稿。使用--no-repo-update參數(shù)可以禁止其做索引更新操作
pod install --no-repo-update
pod update --no-repo-update
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市技羔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卧抗,老刑警劉巖藤滥,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異社裆,居然都是意外死亡拙绊,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門泳秀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)标沪,“玉大人,你說(shuō)我怎么就攤上這事嗜傅〗鹁洌” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵吕嘀,是天一觀的道長(zhǎng)违寞。 經(jīng)常有香客問(wèn)我,道長(zhǎng)偶房,這世上最難降的妖魔是什么趁曼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮蝴悉,結(jié)果婚禮上彰阴,老公的妹妹穿的比我還像新娘。我一直安慰自己拍冠,他們只是感情好尿这,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著庆杜,像睡著了一般射众。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晃财,一...
    開(kāi)封第一講書(shū)人閱讀 49,950評(píng)論 1 291
  • 那天叨橱,我揣著相機(jī)與錄音典蜕,去河邊找鬼。 笑死罗洗,一個(gè)胖子當(dāng)著我的面吹牛愉舔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伙菜,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼轩缤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了贩绕?” 一聲冷哼從身側(cè)響起火的,我...
    開(kāi)封第一講書(shū)人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎淑倾,沒(méi)想到半個(gè)月后馏鹤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娇哆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年湃累,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碍讨。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡脱茉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出垄开,到底是詐尸還是另有隱情,我是刑警寧澤税肪,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布溉躲,位于F島的核電站,受9級(jí)特大地震影響益兄,放射性物質(zhì)發(fā)生泄漏锻梳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一净捅、第九天 我趴在偏房一處隱蔽的房頂上張望疑枯。 院中可真熱鬧,春花似錦蛔六、人聲如沸荆永。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)具钥。三九已至,卻和暖如春液兽,著一層夾襖步出監(jiān)牢的瞬間骂删,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宁玫,地道東北人粗恢。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像欧瘪,于是被迫代替她去往敵國(guó)和親眷射。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • CocoaPods 是什么恋追? CocoaPods 是一個(gè)負(fù)責(zé)管理 iOS 項(xiàng)目中第三方開(kāi)源庫(kù)的工具凭迹。CocoaPo...
    朝洋閱讀 25,665評(píng)論 3 51
  • 項(xiàng)目組件化、平臺(tái)化是技術(shù)公司的共同目標(biāo)苦囱,越來(lái)越多的技術(shù)公司推崇使用pod管理第三方庫(kù)以及私有組件嗅绸,一方面使項(xiàng)目架構(gòu)...
    swu_luo閱讀 21,626評(píng)論 0 39
  • 1、什么是CocoaPods CocoaPods 是開(kāi)發(fā) OS X 和 iOS 應(yīng)用程序的一個(gè)第三方庫(kù)的依賴管理工...
    就叫yang閱讀 2,784評(píng)論 0 11
  • 一. CocoaPods的介紹 什么是CocoaPods撕彤?CocoaPods是一個(gè)負(fù)責(zé)管理iOS項(xiàng)目中第三方開(kāi)源庫(kù)...
    輝712閱讀 3,916評(píng)論 0 7
  • 文|行野言午 “世間不美好鱼鸠, 世界卻美好。晚安羹铅,我的世 間蚀狰;不變...
    行野言午閱讀 240評(píng)論 0 2