iOS性能优化

UItableView实现平滑滚动延迟加载图片

2020-01-17  本文已影响0人  爱睡觉的魚

在项目中我们都遇到过这种情况,给tableViewCell添加图片,有时添加网络图片,在滑动过程中会有一点儿卡,这是在滑动过程中加载图片,为了使用户体验更好,程序看着更流畅。我们可以在滑动结束后再加载图片。

这里我们可以利用CFRunLoopMode的特性,我们知道RunLoop的mode有五种:kCFRynLoopDefaultMode:App的默认Mode,通常主线程是在这个Mode下运行

UITrackingRunLoopMode:界面跟踪Mode,用于ScrollView追踪触摸滑动,保证界面滑动时不受其他Mode影响

kCFRunLoopCommonModes:这是一个占位用的Mode,不是一种真正的Mode

UIInitializationRunLoopMode:在刚启动App时进入的第一个Mode,启动完成后不再使用

GSEventReceiveRunLoopMode:接受系统事件的内部Mode,通常用不到

这样我们可以将图片的加载放到NSDefaultRunLoopMode的mode中,这样在滚动UITrackingRunLoopMode这个mode时不会被加载而影响到。然后再利用performSelector: withObject: afterDelay:方法,这个方法在主线程繁忙的时候回延后执行,因此在发生触摸或是视图还在滚动时这个方法不会运行。关于performSelector: withObject: afterDelay:方法的使用请看这篇文章 https://www.jianshu.com/p/13b273937893

最后代码展示

[self.avatarImageView performSelector:@selector(setImage:)

withObject:downloadedImage

afterDelay:0

inModes:@[NSDefaultRunLoopMode]];

上一篇下一篇

猜你喜欢

热点阅读