日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于TableView中图片的延时加载(转)

發(fā)布時間:2023/12/9 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于TableView中图片的延时加载(转) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

經(jīng)常我們會用tableView顯示很多條目, 有時候需要顯示圖片, 但是一次從服務(wù)器上取來所有圖片對用戶來浪費流量, 對服務(wù)器也是負擔(dān).最好是按需加載,即當(dāng)該用戶要瀏覽該條目時再去加載它的圖片。

重寫如下方法
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
????UIImage *image = [self getImageForCellAtIndexPath:indexPath];??//從網(wǎng)上取得圖片
????[cell.imageView setImage:image];
}

這雖然解決了延時加載的問題, 但當(dāng)網(wǎng)速很慢, 或者圖片很大時(假設(shè),雖然一般cell中的圖很小),你會發(fā)現(xiàn)程序可能會失去對用戶的響應(yīng).
原因是UIImage *image = [self getImageForCellAtIndexPath:indexPath]; 這個方法可能要花費大量的時間,主線程要處理這個method.
所以失去了對用戶的響應(yīng).

所以要將該方法提出來:
- (void)updateImageForCellAtIndexPath:(NSIndexPath *)indexPath
{
????NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
????UIImage *image = [self getImageForCellAtIndexPath:indexPath];
????UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
????[cell.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];
????[pool release];
}
然后再新開一個線程去做這件事情
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
????[NSThread detachNewThreadSelector:@selector(updateImageForCellAtIndexPath:) toTarget:self withObject:indexPath];
}

同理當(dāng)我們需要長時間的計算時,也要新開一個線程 去做這個計算以避免程序處于假死狀態(tài)

以上代碼只是示例, 還可以改進的更多, 比如從網(wǎng)上down下來一次后就將圖片緩存起來,再次顯示的時候就不用去下載。

轉(zhuǎn)載于:https://www.cnblogs.com/cherri/archive/2010/08/26/1808816.html

總結(jié)

以上是生活随笔為你收集整理的关于TableView中图片的延时加载(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。