在項(xiàng)目中我們都遇到過(guò)這種情況,給tableViewCell添加圖片,有時(shí)添加網(wǎng)絡(luò)圖片,在滑動(dòng)過(guò)程中會(huì)有一點(diǎn)兒卡,這是在滑動(dòng)過(guò)程中加載圖片,為了使用戶體驗(yàn)更好,程序看著更流暢。我們可以在滑動(dòng)結(jié)束后再加載圖片。
這里我們可以利用CFRunLoopMode的特性,我們知道RunLoop的mode有五種:kCFRynLoopDefaultMode:App的默認(rèn)Mode,通常主線程是在這個(gè)Mode下運(yùn)行
UITrackingRunLoopMode:界面跟蹤Mode,用于ScrollView追蹤觸摸滑動(dòng),保證界面滑動(dòng)時(shí)不受其他Mode影響
kCFRunLoopCommonModes:這是一個(gè)占位用的Mode,不是一種真正的Mode
UIInitializationRunLoopMode:在剛啟動(dòng)App時(shí)進(jìn)入的第一個(gè)Mode,啟動(dòng)完成后不再使用
GSEventReceiveRunLoopMode:接受系統(tǒng)事件的內(nèi)部Mode,通常用不到
這樣我們可以將圖片的加載放到NSDefaultRunLoopMode的mode中,這樣在滾動(dòng)UITrackingRunLoopMode這個(gè)mode時(shí)不會(huì)被加載而影響到。然后再利用performSelector: withObject: afterDelay:方法,這個(gè)方法在主線程繁忙的時(shí)候回延后執(zhí)行,因此在發(fā)生觸摸或是視圖還在滾動(dòng)時(shí)這個(gè)方法不會(huì)運(yùn)行。關(guān)于performSelector: withObject: afterDelay:方法的使用請(qǐng)看這篇文章?http://www.itdecent.cn/p/13b273937893。
最后代碼展示
[self.avatarImageView performSelector:@selector(setImage:)
withObject:downloadedImage
afterDelay:0
inModes:@[NSDefaultRunLoopMode]];