当前位置:   article > 正文

CFRunloop 优化TableView加载高清大图UI卡顿问题。单独分批加载

CFRunloop 优化TableView加载高清大图UI卡顿问题。单独分批加载

//获取当前runloop

CFRunLoopRef  currentRunloop =  CFRunLoopGetCurrent();

//runloop观察者上下文, 为下面创建观察者准备,只有创建上下文才能在回调了拿到self对象,才能进行我们的逻辑操作. 这是一个结构体。

/**

typedef struct {

CFIndex version;

void * info;

const void *(*retain)(const void *info);

void (*release)(const void *info);

CFStringRef (*copyDescription)(const void *info);

} CFRunLoopObserverContext;

**/

CFRunLoopObserverContext  context = {

0,

(__bridge void *)(self),

&CFRetain,

&CFRelease,

NULL

};

//创建Runloop观察者  kCFRunLoopBeforeWaiting  观察在等待状态之前  runloop有下面几种状态 看英文应该知道了。

/*

kCFRunLoopEntry = (1UL << 0),

kCFRunLoopBeforeTimers = (1UL << 1),

kCFRunLoopBeforeSources = (1UL << 2),

kCFRunLoopBeforeWaiting = (1UL << 5),

kCFRunLoopAfterWaiting = (1UL << 6),

kCFRunLoopExit = (1UL << 7),

kCFRunLoopAllActivities = 0x0FFFFFFFU

*/

static CFRunLoopObserverRef  obserberRef;

obserberRef =CFRunLoopObserverCreate(NULL, kCFRunLoopBeforeWaiting, YES, 0,&callback, &context);

//给当前runloop添加观察者

CFRunLoopAddObserver(currentRunloop, obserberRef, kCFRunLoopDefaultMode);

//释放观察者

CFRelease(obserberRef);

}

//观察回调

static void callback(CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *info){

ViewController * vcSelf = (__bridge ViewController *)(info);

if (vcSelf.TaskMarr.count > 0) {

//获取一次数组里面的任务并执行

runloopTask  task  =  vcSelf.TaskMarr.firstObject;

task();

[vcSelf.TaskMarr removeObjectAtIndex:0];

}else{

return;

}

}

代码分析:

  • 先推理下,如果我要把任务放到Runloop里操作,首先我要获取Runloop。

  • 然后我们需要一个观察者,找一个时机把任务放进去。如果对runloop了解的话,会想到CFRunLoopObserver.然后我们创建一下这个观察者对象

  • 然后把观察者扔进runloop,这样我们就能拿到,Runloop等待之前的回调。

  • 然后把任务扔到回调中。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

框架相关

原生JS虽能实现绝大部分功能,但要么就是过于繁琐,要么就是存在缺陷,故绝大多数开发者都会首选框架开发方案。现阶段较热门是React、Vue两大框架,两者工作原理上存在共通点,也存在一些不同点,对于校招来说,不需要两个框架都学得特别熟,一般面试官会针对你简历中写的框架进行提问。

在框架方面,生命周期、钩子函数、虚拟DOM这些基本知识是必须要掌握的,在学习的过程可以结合框架的官方文档

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

Vue框架

知识要点:
1. vue-cli工程
2. vue核心知识点
3. vue-router
4. vuex
5. http请求
6. UI样式
7. 常用功能
8. MVVM设计模式

React框架

知识要点:
1. 基本知识
2. React 组件
3. React Redux
4. React 路由

-router**

4. vuex
5. http请求
6. UI样式
7. 常用功能
8. MVVM设计模式

[外链图片转存中…(img-op4I7ed0-1711898880048)]

React框架

知识要点:
1. 基本知识
2. React 组件
3. React Redux
4. React 路由

[外链图片转存中…(img-6zsDjD3n-1711898880049)]

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/521424
推荐阅读
相关标签
  

闽ICP备14008679号