亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 系統(tǒng) > iOS > 正文

詳解ios監(jiān)聽(tīng)reloadData刷新列表完畢的時(shí)機(jī)

2019-10-21 18:39:16
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

分析:

reloadData 是一個(gè)異步方法,并不會(huì)等待 UITableView 或者 UICollectionView (后面統(tǒng)稱 listView )真正刷新完畢后才執(zhí)行后續(xù)代碼,而是立即執(zhí)行后續(xù)代碼。我們執(zhí)行 reloadData 的本意是刷新 listView ,隨后會(huì)進(jìn)入一系列的DataSource和Delegate回調(diào),有些是和reloadData同步發(fā)生的,有些是異步發(fā)生的。

  • 同步: numberOfSectionsInCollectionView 和 numberOfItemsInSection
  • 異步: cellForItemAtIndexPath
  • 同步+異步: sizeForItemAtIndexPath

問(wèn)題:

由于cell復(fù)用的原因,直接在 reloadData 后執(zhí)行代碼是有可能出問(wèn)題的。比如在 reloadData 前保留了一個(gè)cell,在 reloadData 后,對(duì)這個(gè)cell(已經(jīng)不是原來(lái)的cell了)進(jìn)行某些操作,會(huì)出現(xiàn)一些異常問(wèn)題。

解決辦法:

在 reloadData 前不是保留cell,二是保留當(dāng)前cell對(duì)應(yīng)的 NSIndexPath ,然后在 reloadData 完畢( listView 真正刷新完畢)后通過(guò)方法 cellForItemAtIndexPath: 重新獲取cell,然后進(jìn)行相應(yīng)的操作。

獲取listView真正刷新完畢的時(shí)機(jī)的幾種方法

方法1、通過(guò)layoutIfNeeded方法,強(qiáng)制重繪并等待完成。

[self.collectionView reloadData];[self.collectionView layoutIfNeeded];// 刷新完成,執(zhí)行后續(xù)需要執(zhí)行的代碼if ( self.didPlayIdx ) {  MyCell* cell = (MyCell*)[self.collectionView cellForItemAtIndexPath:self.didPlayIdx];  if (cell) { [cell playWithPlayer:self.player];  }}

方法2、 reloadData 方法會(huì)在主線程執(zhí)行,通過(guò)GCD,使后續(xù)操作排隊(duì)在 reloadData 后面執(zhí)行。一次runloop有兩個(gè)機(jī)會(huì)執(zhí)行GCD dispatch main queue中的任務(wù),分別在休眠前和被喚醒后。設(shè)置 listView 的 layoutIfNeeded 為YES,在即將進(jìn)入休眠時(shí)執(zhí)行異步任務(wù),重繪一次界面。

[self.collectionView reloadData]; dispatch_async(dispatch_get_main_queue(), ^{   // 刷新完成,執(zhí)行后續(xù)代碼  if ( self.didPlayIdx ) {    MyCell* cell = (MyCell*)[self.collectionView cellForItemAtIndexPath:self.didPlayIdx];    if (cell) {      [cell playWithPlayer:self.player];    }  }});

知識(shí)點(diǎn)關(guān)聯(lián):GCD死鎖、Runloop

// 發(fā)生死鎖,永遠(yuǎn)不會(huì)執(zhí)行任務(wù)2和3NSLog(@"1");dispatch_sync(dispatch_get_main_queue(), ^{  NSLog(@"2");});NSLog(@"3");

方法3、自定義UICollectionView、UITableView,layoutSubviews之后當(dāng)作reloadData完成(復(fù)雜,但可以更好的理解方法一)

#import "MyTableView.h"@interface MyTableView()@property (nonatomic, copy) void (^reloadDataCompletionBlock)();@end@implementation MyTableView- (void)reloadDataWithCompletion:(void (^)())completionBlock {  self.reloadDataCompletionBlock = completionBlock;  [super reloadData];}- (void)layoutSubviews {  [super layoutSubviews];  if (self.reloadDataCompletionBlock) {    self.reloadDataCompletionBlock();    self.reloadDataCompletionBlock = nil;  }}@end// 調(diào)用的時(shí)候[self.tableView reloadDataWithCompletion:^{   NSLog(@"完成刷新");}];

引申:更新UI放在主線程的原因

原因一:安全+效率

因?yàn)閁IKit框架不是線程安全的,當(dāng)多個(gè)線程同時(shí)操作UI的時(shí)候,搶奪資源,導(dǎo)致崩潰,UI異常等問(wèn)題。假如在兩個(gè)線程中設(shè)置了同一張背景圖片,很有可能就會(huì)由于背景圖片被釋放兩次,使得程序崩潰?;蛘吣骋粋€(gè)線程中遍歷找尋某個(gè)subView,然而在另一個(gè)線程中刪除了該subView,那么就會(huì)造成錯(cuò)亂。apple有對(duì)大部分的繪圖方法和諸如UIColor等類改寫成線程安全可用,可還是建議將UI操作保證在主線程中。例如說(shuō),我們需要在子線程中讀取一個(gè)image對(duì)象,使用接口 [UIImage imageNamed:] ,但 imageNamed: 實(shí)際上在 iOS9 以后才是線程安全的, iOS9 之前都需要在主線程獲取。所以,我們需要從子線程切換到主線程獲取image,然后再切回子線程拿到這個(gè)image,這里我們必須使用sync。

__block UIImage *image;dispatch_sync_on_main_queue(^{  image = [UIImage imageNamed:@"Resource/img"];});attachment.image = image;// YYKit中提供了一個(gè)同步扔任務(wù)到主線程的安全方法:/** Submits a block for execution on a main queue and waits until the block completes.*/static inline void dispatch_sync_on_main_queue(void (^block)()) {  if (pthread_main_np()) {    block();  } else {    dispatch_sync(dispatch_get_main_queue(), block);  }}

原因二:用戶體驗(yàn)

iOS中只有主線程才能立即刷新UI。在子線程中是不能夠更新UI,我們看到的子線程能夠更新UI的原因是,等到子線程執(zhí)行完畢,自動(dòng)進(jìn)入了主線程去執(zhí)行子線程中更新UI的代碼。由于子線程執(zhí)行時(shí)間非常短暫,讓我們誤以為子線程可以更新UI。如果子線程一直在運(yùn)行,則無(wú)法更新UI,因?yàn)闆](méi)有辦法進(jìn)入主線程。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到IOS開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
91视频免费在线看| 亚洲国产精品无码av| 久久久久久久欧美精品| 亚洲欧美伊人| 五月婷婷激情综合| 国产喷水theporn| 在线免费观看不卡av| 精品毛片乱码1区2区3区| 日本电影一区二区在线观看| 欧美淫片网站| 欧美色图校园春色| 亚洲永久网站| 中文字幕亚洲一区二区av在线| 亚洲国产精品日韩| 二区视频在线| 人人干人人干人人| 精品美女在线观看视频在线观看| 呦呦视频在线观看| 影音先锋日韩av| 亚洲免费视频中文字幕| 久草中文在线| 超污网站在线观看| 久久久www免费人成精品| 亚洲av成人精品日韩在线播放| 一个人看的www视频免费在线观看| 国产女女做受ⅹxx高潮| 欧美h在线观看| 美女网站色91| 日韩不卡高清视频| 成人性生交免费看| 久久久久久久久久久影院| 亚洲第一av色| 国产精品美女午夜爽爽| 人人草在线视频| 亚洲一二三av| ririsao中文字幕免费| 欧美在线观看不卡| 四虎精品一区二区永久在线观看| 欧美日韩成人在线视频| 米奇777四色精品人人爽| 久久久www免费人成黑人精品| 2021亚洲天堂| 国产亚洲va综合人人澡精品| 精品人伦一区二区三电影| 欧美综合在线播放| 中文字幕第一页av| 91九色鹿精品国产综合久久香蕉| 欧美日韩久久久| 精品久久久久久一区| 国偷自产一区二区免费视频| 91国模大尺度私拍在线视频| 国产精品夜夜爽| 亚洲国产精品无码久久久| 姑娘第5集在线观看免费好剧| 久久精品av| 日韩一区二区三区高清免费看看| 亚洲精品推荐| 无码人妻aⅴ一区二区三区| 天堂成人免费av电影一区| 亚洲免费看黄网站| 国产在线不卡一区| 性欧美极品xxxx欧美一区二区| 91久久精品国产91性色tv| 国产精品色婷婷| 高清国产免费| 91禁外国网站| 成人性做爰aaa片免费看不忠| 亚洲精品永久www嫩草| 国产成人精品aa毛片| 外国一级黄色片| jizzjizzjizz美国| 日韩亚洲欧美成人| 国产又粗又猛又爽视频| 日韩av一二三四| 成人影院一区二区三区| 久久久久性色av无码一区二区| 精品国产精品| 九色porny丨国产首页在线| 九九99玖玖| 欧美激情福利| 天天综合网久久综合网| 亚洲欧美区自拍先锋| 亚洲欧美日韩色图| 日韩精品第一区| 黄色录像一级片| 亚洲一区二区黄| 久久久久毛片免费观看| 精品在线观看入口| 国产视频一区在线观看一区免费| 影音先锋中文在线观看| 亚洲盗摄视频| 久久野战av| 影音先锋中文资源站| 成人精品在线视频| a国产在线视频| 欧美另类高清视频在线| 国产欧美 在线欧美| 久久噜噜色综合一区二区| 天海翼一区二区三区四区在线观看| 黄色国产网站在线播放| 亚洲成av人**亚洲成av**| 一本大道伊人av久久综合| 亚洲天堂视频在线观看免费| 久久久久亚洲av成人片| aaa在线播放视频| eeuss性xxxxxx电影| 玖玖玖电影综合影院| 精品亚洲国产视频| 久久精品亚洲精品国产欧美kt∨| 99色这里只有精品| 欧美性xxxxxbbbbbb精品| 成人美女在线视频| 国产精品手机在线观看| 欧美一级日本a级v片| 黄色在线成人| 青青热久免费精品视频在线18| 97影视大全免费追剧大全在线观看| 严阵以待中文社区| a级片在线播放| 欧美 日韩 国产 一区| 亚洲女同志freevdieo| 麻豆网址在线观看| 国产精品嫩草99av在线| 婷婷电影在线观看| 91精品国产成人观看| 午夜在线网站| 日韩激情精品| 国产69精品一区二区亚洲孕妇| 亚洲乱码中文字幕久久孕妇黑人| 秋霞福利视频| 日韩欧美精品一区二区| 91精品少妇一区二区三区蜜桃臀| 在线观看日韩国产| 久久免费视频在线观看| 青青在线视频一区二区三区| 日本一卡二卡四卡精品| 不卡一区二区在线观看| 黄色片在线免费观看| 97久久超碰国产精品电影| 精品人妻无码一区二区三区换脸| 日韩在线天堂| 国产免费黄色大片| aaaaaa毛片| 亚洲午夜精品久久久久久高潮| 91在线观看免费观看| 欧美精品www在线观看| 亚洲女同另类| 色欲av无码一区二区人妻| 久久久久久久久久看片| 日韩亚洲精品电影| 免费人成黄页网站在线一区二区| 欧美日韩女优| 欧美日韩综合视频| 亚洲成年人电影| xxxxx.日韩| 久久久精品视频免费观看| 欧美极品少妇与黑人| 成人网站免费观看| 91久久精品国产91久久性色tv| 日本美女视频网站| 欧美一区二区大胆人体摄影专业网站| 99精品国产一区二区三区| 天天舔天天干天天操| www.日本久久久久com.| 91精品婷婷国产综合久久性色| 国产精品久久久久久久久搜平片| 国产真实乱人偷精品视频| 国产亚洲一区二区三区不卡| 亚洲综合色激情五月| 人妻精品久久久久中文字幕| 国产伦精品一区二区三区在线观看| 日韩精品一区二区亚洲av| 免费在线观看污| 中文不卡1区2区3区| 男女视频在线观看免费| 国产又粗又猛大又黄又爽| 亚洲网站视频在线观看| 中文字幕日本在线| 亚洲熟女一区二区| 欧美黄色www| www.三级.com| 久久久福利影院| 国产xxxxhd| 美女网站视频在线观看| a级片在线免费观看| 久久日韩精品| 午夜精品久久久久久久四虎美女版| 精品久久福利| 亚洲深夜影院| 欧美专区在线观看| 国产精品国语对白| av福利网址| 不卡的av中国片| 国产精品福利在线观看网址| 日韩在线一区二区三区四区| 污视频免费在线观看| 天堂中文网在线| 天天躁日日躁狠狠躁av| 欧美激情久久久| 69精品人人人人| 欧美日韩亚洲国产一区| 日韩激情视频在线播放| 色妞一区二区三区| a√天堂在线观看| 国产精品亚洲综合久久| 91久久国产综合| 一区二区三区四区视频在线观看| 日本欧美不卡| 激情综合丝袜美女一区二区| 国产乱人伦偷精品视频免下载| 91成人在线看| 精品一区二区免费在线观看| 少妇精品久久久久久久久久| 一区二区精品伦理...| 伊人开心综合网| 天堂资源在线观看| 亚洲人成网站在线| 午夜免费啪视频观看视频| 欧洲毛片在线视频免费观看| 99.玖玖.com| 一区二区三区人妻| 香蕉视频国产精品| 制服丝袜第一页在线观看| 天堂av.com| 思思99精品视频在线观看| 在线免费一级片| 亚洲国产欧美另类丝袜| 嫩草影院发布页| 美女被久久久| 四虎在线免费观看| 伊人亚洲福利一区二区三区| 亚洲理论电影片| 伊人夜夜躁av伊人久久| 中文一区一区三区免费在线观看| 精品视频在线观看一区二区| 黄色激情视频在线观看| 婷婷精品在线| 国产精品3区| 亚洲精品午夜国产va久久成人| 97精品伊人久久久大香线蕉| 欧美女孩性生活视频| 久久精品国产亚洲AV成人婷婷| 在线性视频日韩欧美| 久久久亚洲综合网站| 国产精品日韩电影| 97se亚洲国产综合自在线| 午夜av噜噜噜噜噜噜| 精品一二三区| 日韩欧美成人精品| 国产玖玖精品视频| 国产成人一区二区三区电影| 在线观看私人影院w| 成人私拍视频| 欧美jizzhd精品欧美巨大免费| 北条麻妃在线视频| 伊人无码高清| 人妻熟女aⅴ一区二区三区汇编| 日韩欧美电影在线| 国产精品高精视频免费| 亚洲精品v欧美精品v日韩精品| 黄色免费在线看| 国产精品视频一区二区三区不卡| 精品欧美一区二区在线观看视频| 自拍日韩亚洲一区在线| 影音先锋男人资源在线观看| 久精品国产欧美| 久久亚洲欧美日韩精品专区| 午夜精品短视频| 日韩在线一区二区视频| 国产日韩视频| 国产精品美女久久久久久久| 丰满的亚洲女人毛茸茸| 很黄很黄的网站免费的| h视频在线免费观看| 免费毛片在线不卡| 免费在线视频你懂得| 日韩成人黄色| 欧美猛交免费看| 亚洲视频一区在线| www.一区二区三区| 豆国产97在线 | 亚洲| 自拍视频在线播放| 99视频在线观看免费| 午夜电影福利| 综合久久婷婷| 国产综合内射日韩久| 国产成+人+亚洲+欧美+综合| 亚洲黄色www| 亚洲成人免费看| 亚洲图区欧美| 国产成人无码精品亚洲| 自拍偷拍国产亚洲| 亚洲国产欧美一区二区丝袜黑人| 桃花网日韩影视在线观看视频| 国产欧美久久久精品免费| 精品这里只有精品| 老司机免费视频久久| 最近久乱中文字幕| 久久成人18免费网站| 污视频网站免费在线观看| 麻豆一区二区三区视频| 日本sm极度另类视频| 伦理片一区二区三区| 99蜜桃在线观看免费视频网站| 国产三区精品| 日韩欧美伦理| 清纯唯美亚洲经典中文字幕| 51蜜桃传媒精品一区二区| 欧美日韩电影一区| 99久久99久久免费精品蜜臀| 久草在.com| 国产精品午夜剧场| 国产无遮无挡120秒| 一二区成人影院电影网| 国产videos久久| 久久国产精品国产精品| 欧美free性| 欧美日韩免费电影| 欧美成年人网站| 国产精品妹子av| 一区二区三区丝袜| 美女扒开腿免费视频| 中文字幕中文字幕在线中高清免费版| av资源网在线观看| 天堂中文av在线资源库| 国产偷窥女洗浴在线观看亚洲| 高清国语自产拍免费视频国产| av天在线播放|