File tree Expand file tree Collapse file tree
2024/04/28/iOS/深入解析 iOS-RunLoop:事件驱动的核心机制 Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1616 hexoVersion : '6.3.0'
1717} </ script > < link rel ="alternate " href ="/atom.xml " title ="布多的博客 " type ="application/atom+xml ">
1818</ head > < body > < canvas class ="fireworks "> </ canvas > < i class ="fa fa-arrow-right " id ="toggle-sidebar " aria-hidden ="true "> </ i > < div id ="sidebar " data-display ="true "> < div class ="toggle-sidebar-info text-center "> < span data-toggle ="切换文章详情 "> 切换站点概览</ span > < hr > </ div > < div class ="sidebar-toc "> < div class ="sidebar-toc__title "> 目录</ div > < div class ="sidebar-toc__progress "> < span class ="progress-notice "> 你已经读了</ span > < span class ="progress-num "> 0</ span > < span class ="progress-percentage "> %</ span > < div class ="sidebar-toc__progress-bar "> </ div > </ div > < div class ="sidebar-toc__content "> < ol class ="toc "> < li class ="toc-item toc-level-2 "> < a class ="toc-link " href ="#%E5%89%8D%E8%A8%80 "> < span class ="toc-number "> 1.</ span > < span class ="toc-text "> 前言</ span > </ a > </ li > < li class ="toc-item toc-level-2 "> < a class ="toc-link " href ="#%E4%BB%80%E4%B9%88%E6%98%AF-Even-Loop "> < span class ="toc-number "> 2.</ span > < span class ="toc-text "> 什么是 Even Loop</ span > </ a > </ li > < li class ="toc-item toc-level-2 "> < a class ="toc-link " href ="#RunLoop-%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86 "> < span class ="toc-number "> 3.</ span > < span class ="toc-text "> RunLoop 的工作原理</ span > </ a > </ li > < li class ="toc-item toc-level-2 "> < a class ="toc-link " href ="#RunLoop-%E7%9A%84%E5%AE%9E%E7%8E%B0%E7%BB%86%E8%8A%82 "> < span class ="toc-number "> 4.</ span > < span class ="toc-text "> RunLoop 的实现细节</ span > </ a > < ol class ="toc-child "> < li class ="toc-item toc-level-3 "> < a class ="toc-link " href ="#RunLoop-%E5%85%A5%E5%8F%A3 "> < span class ="toc-number "> 4.1.</ span > < span class ="toc-text "> RunLoop 入口</ span > </ a > </ li > < li class ="toc-item toc-level-3 "> < a class ="toc-link " href ="#RunLoop-%E6%A0%B8%E5%BF%83 "> < span class ="toc-number "> 4.2.</ span > < span class ="toc-text "> RunLoop 核心</ span > </ a > </ li > </ ol > </ li > < li class ="toc-item toc-level-2 "> < a class ="toc-link " href ="#RunLoop-%E4%B8%8E-RunLoopMode "> < span class ="toc-number "> 5.</ span > < span class ="toc-text "> RunLoop 与 RunLoopMode</ span > </ a > </ li > < li class ="toc-item toc-level-2 "> < a class ="toc-link " href ="#%E5%85%B3%E4%BA%8E-CommonModes "> < span class ="toc-number "> 6.</ span > < span class ="toc-text "> 关于 CommonModes</ span > </ a > </ li > < li class ="toc-item toc-level-2 "> < a class ="toc-link " href ="#RunLoop-%E4%B8%8E%E7%BA%BF%E7%A8%8B%E7%9A%84%E5%85%B3%E7%B3%BB "> < span class ="toc-number "> 7.</ span > < span class ="toc-text "> RunLoop 与线程的关系</ span > </ a > </ li > < li class ="toc-item toc-level-2 "> < a class ="toc-link " href ="#%E8%8B%B9%E6%9E%9C%E5%88%A9%E7%94%A8-RunLoop-%E5%AE%9E%E7%8E%B0%E7%9A%84%E5%8A%9F%E8%83%BD "> < span class ="toc-number "> 8.</ span > < span class ="toc-text "> 苹果利用 RunLoop 实现的功能</ span > </ a > < ol class ="toc-child "> < li class ="toc-item toc-level-3 "> < a class ="toc-link " href ="#AutoreleasePool-%E4%B8%8E-RunLoop "> < span class ="toc-number "> 8.1.</ span > < span class ="toc-text "> AutoreleasePool 与 RunLoop</ span > </ a > </ li > </ ol > </ li > </ ol > </ div > </ div > < div class ="author-info hide "> < div class ="author-info__avatar text-center "> < img src ="/images/avatar.jpg "> </ div > < div class ="author-info__name text-center "> 布多</ div > < div class ="author-info__description text-center "> 前进!前进!!不择手段地前进!!!</ div > < div class ="follow-button "> < a target ="_blank " rel ="noopener " href ="https://github.com/internetwei "> Follow Me</ a > </ div > < hr > < div class ="author-info-articles "> < a class ="author-info-articles__archives article-meta " href ="/archives "> < span class ="pull-left "> 文章</ span > < span class ="pull-right "> 11</ span > </ a > < a class ="author-info-articles__tags article-meta " href ="/tags "> < span class ="pull-left "> 标签</ span > < span class ="pull-right "> 9</ span > </ a > < a class ="author-info-articles__categories article-meta " href ="/categories "> < span class ="pull-left "> 分类</ span > < span class ="pull-right "> 4</ span > </ a > </ div > < hr > < div class ="author-info-links "> < div class ="author-info-links__title text-center "> 友链</ div > < a class ="author-info-links__name text-center " target ="_blank " rel ="noopener " href ="https://www.coderqi.com/ "> 齐小胖之家</ a > </ div > </ div > </ div > < div id ="content-outer "> < div id ="top-container " style ="background-image: url(/images/backgroundImage.jpg) "> < div id ="page-header "> < span class ="pull-left "> < a id ="site-name " href ="/ "> 布多的博客</ a > </ span > < i class ="fa fa-bars toggle-menu pull-right " aria-hidden ="true "> </ i > < span class ="pull-right menus "> < a class ="site-page " href ="/ "> 首页</ a > < a class ="site-page " href ="/tags "> 标签</ a > < a class ="site-page " href ="/categories "> 分类</ a > < a class ="site-page " href ="/archives "> 归档</ a > < a class ="site-page " href ="/about "> 关于</ a > </ span > < span class ="pull-right "> < a class ="site-page social-icon search "> < i class ="fa fa-search "> </ i > < span > 搜索</ span > </ a > </ span > </ div > < div id ="post-info "> < div id ="post-title "> 深入解析 iOS-RunLoop:事件驱动的核心机制</ div > < div id ="post-meta "> < time class ="post-meta__date "> < i class ="fa fa-calendar " aria-hidden ="true "> </ i > 2024-04-28</ time > < span class ="post-meta__separator "> |</ span > < i class ="fa fa-inbox post-meta__icon " aria-hidden ="true "> </ i > < a class ="post-meta__categories " href ="/categories/iOS/ "> iOS</ a > < div class ="post-meta-wordcount "> < span > 字数总计: </ span > < span class ="word-count "> 3.3k</ span > < span class ="post-meta__separator "> |</ span > < span > 阅读时长: 13 分钟</ span > </ div > </ div > </ div > </ div > < div class ="layout " id ="content-inner "> < article id ="post "> < div class ="article-container " id ="post-content "> < blockquote >
19- < p > 由 布多(budo) 发布于 2024-04-28 • 最后更新于 2025-02-27 </ p >
19+ < p > 由 布多(budo) 发布于 2024-04-28 • 最后更新于 2025-03-21 </ p >
2020</ blockquote >
2121< h2 id ="前言 "> < a href ="#前言 " class ="headerlink " title ="前言 "> </ a > 前言</ h2 > < p > RunLoop 是 iOS 开发中的一个基础概念,苹果有许多功能都依赖于 RunLoop,例如线程中的自动释放池、NSTimer、系统事件响应、屏幕刷新等。本文将深入剖析 iOS 中 RunLoop 的内部实现细节,帮助你更好地理解这一机制。</ p >
2222< h2 id ="什么是-Even-Loop "> < a href ="#什么是-Even-Loop " class ="headerlink " title ="什么是 Even Loop "> </ a > 什么是 Even Loop</ h2 > < p > 在讨论 RunLoop 之前,先了解一下线程的基本概念。通常,线程执行完一个任务后就会退出,要重新执行任务只能再创建一个新线程。但如果我们希望线程在处理完任务后不退出,而是等待并处理新的任务,就需要一种机制来保持线程的活动状态,这就是 < a target ="_blank " rel ="noopener " href ="https://en.wikipedia.org/wiki/Event_loop "> Even Loop</ a > (事件循环)。</ p >
Load Diff Large diffs are not rendered by default.
You can’t perform that action at this time.
0 commit comments