From f19b18bf51d010d9ba1bad4f1408a5f4b7bb839f Mon Sep 17 00:00:00 2001 From: Sylar Date: Thu, 22 Aug 2024 17:19:20 +0800 Subject: [PATCH] YYAsyncLayer SourceCode --- iOS/SourceCode/YYASyncLayer.md | 16 ++++++++++++++-- iOS/UIKit/UIViewRender.md | 10 +++++++--- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/iOS/SourceCode/YYASyncLayer.md b/iOS/SourceCode/YYASyncLayer.md index 6881a427..392afc16 100644 --- a/iOS/SourceCode/YYASyncLayer.md +++ b/iOS/SourceCode/YYASyncLayer.md @@ -12,6 +12,8 @@ YYTransaction.h (.m) - YYSentinel 类是一个计数的类,是为了记录最新的布局请求标识,便于及时的放弃多余的绘制逻辑以减少开销。 - YYTransaction 类是事务类,捕获主线程 runloop 的某个时机回调,用于处理异步绘制事件。 + + ## 为什么需要异步绘制? ### 1、界面卡顿的实质 @@ -380,7 +382,7 @@ BOOL (^isCancelled)(void) = ^BOOL() { ### 5、异步线程的管理 -笔者去除了判断 YYDispatchQueuePool 库是否存在的代码,实际上那就是作者提取的队列管理封装,思想和以下代码一样。 +去除了判断 YYDispatchQueuePool 库是否存在的代码,实际上那就是作者提取的队列管理封装,思想和以下代码一样。 @@ -430,7 +432,17 @@ static dispatch_queue_t YYAsyncLayerGetDisplayQueue() { **所以,笔者认为:超过处理器核心数量的线程没有处理速度上的优势,只是在业务上便于管理,并且能最大化的利用处理器资源。** -而串行队列中只有一个线程,该框架中,作者使用和处理器核心相同数量的串行队列来轮询处理异步任务,有效的减少了线程调度操作。 + + +(也是一个核心原理) + +**而串行队列中只有一个线程**, + + + +该框架中,作者使用和处理器核心相同数量的串行队列来轮询处理异步任务,有效的减少了线程调度操作。 + + ##### 要点 2 :创建串行队列,设置优先级 diff --git a/iOS/UIKit/UIViewRender.md b/iOS/UIKit/UIViewRender.md index b8d5d2cd..062bd507 100644 --- a/iOS/UIKit/UIViewRender.md +++ b/iOS/UIKit/UIViewRender.md @@ -136,7 +136,7 @@ CGContextRef con = UIGraphicsGetCurrentContext(); -## View布局与约束时机 +## 4. View布局与约束时机 一个视图的布局指的是它在屏幕上的的大小和位置。每个 view 都有一个 frame 属性,用来表示在父 view 坐标系中的位置和具体的大小。`UIView` 给你提供了用来通知系统某个 view 布局发生变化的方法,也提供了在 view 布局重新计算后调用的可重写的方法。 @@ -245,7 +245,7 @@ Update cycle 是当应用完成了你的所有事件处理代码后控制流回 -## View绘制渲染机制和Runloop什么关系 +## 5. View绘制渲染机制和Runloop什么关系 @@ -281,7 +281,7 @@ CA::Layer::display_if_needed(); -## UI 卡顿,列表卡顿、掉帧原理 +## 6. UI 卡顿,列表卡顿、掉帧原理 ![image-20190312140156990](http://sylarimage.oss-cn-shenzhen.aliyuncs.com/2019-03-22-024849.png) @@ -309,7 +309,11 @@ iOS的 `mainRunloop`是一个60fps的回调,也就是说每16.7ms(VSync信号 +## 7. 结合阅读 +YYAsyncLayer基于异步绘制: + +[YYAsyncLayer 异步绘制原理解析](../SourceCode/YYAsyncLayer.md)