利用Runloop优化流畅度

我们可以对runloop添加观察者,当观察到状态为kCFRunLoopExit,kCFRunLoopBeforeWaiting的时候,做一些耗时的处理,废话不说,直接上代码

- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor redColor];UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds];[self.view addSubview:tableView];tableView.delegate = self;tableView.dataSource = self;//    for (int i = 0; i < 100000; i ++){//        UIView *view = [UIView new];
//        [self.view addSubview:view];
//    }__block NSMutableArray *arr = [[NSMutableArray alloc] init];for (int i = 0; i < 10000; i ++){[arr addObject:@0];}NSLog(@"添加完了");_arr = arr;_observer = CFRunLoopObserverCreateWithHandler(CFAllocatorGetDefault(), kCFRunLoopAllActivities, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {NSLog(@"----监听到RunLoop状态发生改变---%zd", activity);if ((activity == kCFRunLoopExit || activity == kCFRunLoopBeforeWaiting )  && arr.count > 0){UIView *view = [UIView new];[self.view addSubview:view];[arr removeObjectAtIndex:0];NSLog(@"还有%ld",arr.count);CFRunLoopWakeUp(CFRunLoopGetCurrent());}});CFRunLoopAddObserver(CFRunLoopGetCurrent(), _observer, kCFRunLoopDefaultMode);CFRelease(_observer);
}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{return 1000;
}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"123"];if (!cell){cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"123"];}cell.backgroundColor = [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0];return cell;
}
- (void)dealloc {CFRunLoopRemoveObserver(CFRunLoopGetCurrent(), _observer, kCFRunLoopCommonModes);
}

这里tableView滑动的时候是不会创建view的,只有滑动结束的时候才会继续创建,这主要用在不是很着急使用的场景对流畅度进行一定的优化

利用Runloop优化流畅度相关推荐

  1. Flutter 流畅度优化实践总结

    本篇内容来自ArchSummit会议分享 作者介绍: 张云龙(云从),闲鱼客户端专家.先后在网易.字节.阿里任职移动端研发.目前在阿里巴巴闲鱼技术部,目前负责闲鱼 app 包大小.流畅度.启动等端体验 ...

  2. 他把闲鱼APP长列表流畅度翻了倍(良心教程)

    简介:从"麻绳版顺滑"到"丝般顺滑" 作者:闲鱼技术-云从 1 整体思路 闲鱼在业务的快速迭代过程中,app 的长列表滑动流畅度逐步恶化,对用户浏览内容体验产生 ...

  3. iOS性能优化系列篇之“列表流畅度优化”工具篇

    这一篇文章是iOS性能优化系列文章的的第二篇,主要内容是关于列表流畅度的优化.在具体内容的阐述过程中会结合性能优化的总体原则进行分析,所以建议大家在阅读这篇文章前先阅读一下上一篇文章:iOS性能优化系 ...

  4. 一个对复用view下滑动流畅度优化,图片和内存处理,稳定性都非常强大的android开源框架(beyondPhysics)...

    github开源地址https://github.com/xihuan22d/BeyondPhysics 你的收藏是作者前进的动力哦,欢迎在github留星哦, 欢迎阿里的大牛们给予宝贵的意见... ...

  5. Android App界面和流畅度优化

    Android App界面和流畅度优化 所谓界面和流畅度优化,就是尽可能多地消除用户可直接感知的.影响用户操作体验的bug 1.人为在UI线程中做轻微耗时操作,导致UI线程卡顿 人为避免一切耗时操作 ...

  6. 已开源!Flutter 基于分帧渲染的流畅度优化组件 Keframe

    大家好,这里是承香墨影! 今天给大家推荐一个,Flutter 中利用分帧渲染优化流程度的开源库,刚开源,还热乎着.这次开源可真波折,看着 @Nayuta 前前后后在公司内部流程走了一个多月吧,太艰难了 ...

  7. Android 流畅度评估及卡顿定位、优化

    转载:在路上的博客:Android 流畅度评估及卡顿优化 导言:本文主要是关于 Android 流畅度和卡顿优化的全方位介绍,算是对 2020 部分工作的总结. 文章目录 1.渲染和流畅概念 (1)为 ...

  8. android10系统打王者掉帧,再也不怕掉帧卡顿 教你如何自己优化《王者荣耀》流畅度 - 非凡软件站...

    最近有许多玩家给小编说,王者荣耀更新到某个版本后,游戏出现了卡顿掉帧情况,这其实是游戏自己"优化"所导致.对于不同机型的手机,,<王者荣耀>会使用不同的图形API.不同 ...

  9. 淘特 Flutter 流畅度优化实践 · 二期

    作者:谢伟(韦圣) "在上一篇<淘特 Flutter 流畅度优化实践>中说到,虽然一期效果较为明显,但距离极致的用户体验仍有不小的差距.去年,淘特端架构联合业务团队共同发起&qu ...

最新文章

  1. jquery 取消 radio checked 属性,重新选中的问题解决
  2. create react app 在start后不清空terminal
  3. C#中使用资源文件保存图片和皮肤文件的使用
  4. linux树莓派扩容,树莓派ubuntu 扩容
  5. php 不解析,php不解析html代码
  6. 跟我一起学习ASP.NET 4.5 MVC4.0(一)
  7. [学习笔记]扩展LUCAS定理
  8. 134.加油站(javascript)
  9. Map 3D 2012定制和应用程序开发Webcast将于明天(6月23号)进行
  10. C# 提取PDF中的表格
  11. matlab中whos怎么用,【安富莱DSP教程】第3章 Matlab 简易使用(一)
  12. C++跨平台开源库 之三
  13. 关于SMTP邮件无法发送到 SMTP服务器,传输错误代码为 0x80040217
  14. 数据库中 date 类型 实体类对应可以是 String 类型
  15. yocto平台初步提交uboot patch
  16. 【LaTeX应用】LaTeX绘图
  17. ARM 64指令小记
  18. 数据库系统是包括了计算机硬件系统,数据库系统包括______和工作人员等部分。...
  19. 软件测试质量保证与测试
  20. 谁动了我的奶酪读后感一篇

热门文章

  1. ss5 mysql radius_SS5+MYSQL
  2. 相濡以沫非真性----读《庄子》有感
  3. IDEA:如何创建 Android 项目
  4. 小米智能开关里的火线和零线是什么意思?该如何选择?
  5. EndPoint学习之路_02:EndPoint产品讲解一指禅
  6. fastDFS and mogileFS
  7. github桌面版教程
  8. Apache安装中出现443端口被占用的解决方法
  9. 浅谈高可用度量及治理
  10. 从零搭建SpringCloud服务(史上最详细)