異步下載圖片

一. 加載圖片常見問題

1.同步加載圖片

存在問題:
通過模擬延時(shí)發(fā)現(xiàn)衔统,如果網(wǎng)速慢鹿榜,會(huì)非常卡锦爵,影響用戶體驗(yàn)
滾動(dòng)表格舱殿,會(huì)重復(fù)下載圖像,造成用戶流量的損失险掀!

  • 解決方法: 異步下載圖片
2.異步加載圖片

存在問題:
下載完圖片不顯示沪袭。不顯示原因:
1.使用的是系統(tǒng)提供的 cell
2.異步方法中只設(shè)置了圖像,但是沒有設(shè)置 frame
3.圖像加載后樟氢,一旦與cell 交互冈绊,會(huì)調(diào)用 cell 的 layoutSubviews 方法,重新調(diào)整cell 的布局.

  • 解決方法:使用占位圖片
新問題: 使用占位圖片異步加載圖片完成后埠啃,點(diǎn)擊圖像會(huì)變小
  • 解決辦法:自定義 cell(自定義 cell 可以自己固定每一個(gè)子控件的 frame)
3.自定義cell

存在問題:
如果網(wǎng)絡(luò)圖片下載速度不一致死宣,同時(shí)用戶滾動(dòng)圖片,可能會(huì)出現(xiàn)圖片顯示"錯(cuò)行"的問題碴开。

  • 解決方法: MVC
4.MVC解決錯(cuò)行問題

存在問題
如果圖像下載很慢毅该,用戶滾動(dòng)表格很快,會(huì)造成重復(fù)創(chuàng)建下載操作叹螟。

  • 解決方法: 使用操作緩存池
5.緩存池的選擇

所謂緩沖池鹃骂,其實(shí)就是一個(gè)容器,能夠存放多個(gè)對象
數(shù)組:按照下標(biāo)罢绽,可以通過 indexPath 可以判斷操作是否已經(jīng)在進(jìn)行中 畏线,無法解決上拉 & 下拉刷新
NSSet -> 無序的,無法定位到緩存的操作
字典:按照key良价,可以通過下載圖像的 URL(唯一定位網(wǎng)絡(luò)資源的字符串)

  • 小結(jié):選擇字典作為操作緩沖池寝殴。
6.圖片緩存池

優(yōu)點(diǎn):
不用重復(fù)下載,利用MVC刷新表格明垢,不會(huì)造成數(shù)據(jù)混亂
缺點(diǎn):
所有下載后的圖像蚣常,都會(huì)記錄在模型中
如果模型數(shù)據(jù)本身很多(2000),單純圖像就會(huì)占用很大的內(nèi)存空間 如果圖像和模型綁定的很緊痊银,不容易清理內(nèi)存

  • 解決辦法: 使用圖片緩存池
7.內(nèi)存警告

如果接收到內(nèi)存警告抵蚊,程序一定要做處理

-(void)didReceiveMemoryWarning {
   [superdidReceiveMemoryWarning];
   // 1. 取消下載操作
   [self.downloadQueuecancelAllOperations];
   //2. 清空緩沖池
  [self.operationCacheremoveAllObjects];
  [self.imageCacheremoveAllObjects];
}
8.沙盒緩存實(shí)現(xiàn)
沙盒目錄介紹

Documents
保存由應(yīng)用程序產(chǎn)生的文件或者數(shù)據(jù),例如:涂鴉程序生成的圖片,游戲關(guān)卡記錄 ,iCloud 會(huì)自動(dòng)備份Document 中的所有文件,如果保存了從網(wǎng)絡(luò)下載的文件贞绳,在上架審批的時(shí)候谷醉,會(huì)被拒!
Tmp
臨時(shí)文件夾冈闭,保存臨時(shí)文件保存在 tmp 文件夾中的文件俱尼,系統(tǒng)會(huì)自動(dòng)回收,譬如磁盤空間緊張或者重新啟動(dòng)手機(jī)程序員不需要管 tmp 文件夾中的釋放
Caches
緩存萎攒,保存從網(wǎng)絡(luò)下載的文件遇八,后續(xù)仍然需要繼續(xù)使用,例如:網(wǎng)絡(luò)下載的離線數(shù)據(jù)耍休,圖片刃永,視頻...緩存目錄中的文件系統(tǒng)不會(huì)自動(dòng)刪除,可以做離線訪問羹应!要求程序必需提供一個(gè)完善的清除緩存目錄的"解決方案"揽碘!
Preferences
系統(tǒng)偏好,用戶偏好操作是通過 [NSUserDefaultsstandardDefaults] 來直接操作

iOS 不同版本間沙盒目錄的變化
1.iOS 7.0及以前版本 bundle 目錄和沙盒目錄是在一起的
2.iOS 8.0之后园匹,bundle 目錄和沙盒目錄是分開的

NSString+Path
@implementation NSString (Path)
- (NSString *)appendDocumentPath {
   NSString*dir=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
   return[dir stringByAppendingPathComponent:self.lastPathComponent];
}
-(NSString *)appendCachePath {
  NSString*dir=NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;
  return[dir stringByAppendingPathComponent:self.lastPathComponent];
}
-(NSString *)appendTempPath {
return[NSTemporaryDirectory() stringByAppendingPathComponent:self.lastPathComponent];
}
@end
  • 沙盒緩存

     將圖像保存至沙盒
    
     // 將圖片保存到沙盒緩存中
    
     if (data != nil)
     {
    [data writeToFile:app.icon.appendCachePath
    atomically:true];
    
    }
    

    檢查沙盒緩存

    // 判斷沙盒文件是否存在

    UIImage *image = [UIImage
    imageWithContentsOfFile:app.icon.appendCachePath];

    if (image != nil) {
    NSLog(@"從沙盒加載圖像 ... %@", app.name);

    // 將圖像添加至圖像緩存
    [self.imageCache setObject:image forKey:app.icon];
    cell.iconView.image = image;
    return cell;

    }
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雳刺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子裸违,更是在濱河造成了極大的恐慌掖桦,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件供汛,死亡現(xiàn)場離奇詭異枪汪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)怔昨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門雀久,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人趁舀,你說我怎么就攤上這事赖捌。” “怎么了矮烹?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵越庇,是天一觀的道長。 經(jīng)常有香客問我奉狈,道長卤唉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任仁期,我火速辦了婚禮桑驱,結(jié)果婚禮上竭恬,老公的妹妹穿的比我還像新娘。我一直安慰自己熬的,他們只是感情好萍聊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悦析,像睡著了一般。 火紅的嫁衣襯著肌膚如雪此衅。 梳的紋絲不亂的頭發(fā)上强戴,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機(jī)與錄音挡鞍,去河邊找鬼骑歹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛墨微,可吹牛的內(nèi)容都是我干的道媚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼翘县,長吁一口氣:“原來是場噩夢啊……” “哼最域!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起锈麸,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤镀脂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后忘伞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體薄翅,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年氓奈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了翘魄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,769評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舀奶,死狀恐怖暑竟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伪节,我是刑警寧澤光羞,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站怀大,受9級(jí)特大地震影響纱兑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜化借,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一潜慎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦铐炫、人聲如沸垒手。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽科贬。三九已至,卻和暖如春鳖悠,著一層夾襖步出監(jiān)牢的瞬間榜掌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工乘综, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留憎账,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓卡辰,卻偏偏與公主長得像胞皱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子九妈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評論 2 354

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