聊聊iOS中的中心重定向 发表于 2023-05-08 | 分类于 OC 字数统计: 6,590 | 阅读时长 ≈ 29 背景中心重定向,顾名思义,就是将某些流程统一流转到某个中心,然后进行一些切面操作,之后再继续回到原有后续流程。某种意义上来说,中心重定向和 iOS 中的 Hook 非常相似,但是不是同一个东西,中心重定向必须要有1个中心,而Hook可以没有。本文将通过几个例子来举例说明。 如何用 JS 语法书写 i ... 阅读全文 »
优先级反转那些事儿 发表于 2022-11-23 字数统计: 6,917 | 阅读时长 ≈ 31 该文章同步发表于微信公众号:<<优先级反转那些事儿>> 背景最近在线上碰到大量读写锁的卡死,通过观察发现,出问题的线程堆栈都是NSOperationQueue队列,且都有QOS:BACKGROUND标记。整体看起来持有锁的子线程仍然在执行,只是留给主线程的时间不够了,从而 ... 阅读全文 »
深入理解 OC/C++ 闭包 发表于 2022-02-14 | 分类于 OC C++ 字数统计: 3,940 | 阅读时长 ≈ 17 该文章同步发表于微信公众号:<<深入理解 OC/C++ 闭包>> 背景苹果的Objective-C编译器允许用户在同一个源文件里自由地混合使用C++和Objective-C,混编后的语言叫Objective-C++。相对于其它语言(例如Swift、Kotlin、Dart等 ... 阅读全文 »
记一个AVAudioPlayer Crash修复 发表于 2021-05-10 | 分类于 iOS 字数统计: 937 | 阅读时长 ≈ 4 背景之前曾经遇到过一个AVAudioPlayer的多线程crash,这里记录一下。 crash堆栈如下所示12345678910Crashed: com.apple.main-thread0 libobjc.A.dylib 0x1834fc910 objc_msgSend + 161 AVFAudi ... 阅读全文 »
Humble Assets Catalog 发表于 2019-04-14 | 分类于 iOS 字数统计: 5,821 | 阅读时长 ≈ 23 背景QQ阅读在首次启动,进入阅读页之后,呼出上下菜单,点击设置,会出现明显的卡顿现象,而之后再次操作便不会出现相同的问题。 首次分析解决通过Instrument测量发现,大量的时间都集中在加载图片的逻辑里:[UIImage imageNamed:],此时也就可以理解为什么只有首次才会出现卡顿了。 通 ... 阅读全文 »
Txt引擎工作原理 发表于 2019-04-05 字数统计: 9,947 | 阅读时长 ≈ 45 前言最近为了解决切章过程中碰到的各种疑难杂症,不得不深入到TxtEngine中调试分析一些细节,尽管之前为了解决卡牌的排版问题也接触过,但是每次都是只见树木不见森林。为了避免一叶障目不见泰山,所以下决心梳理下该阅读引擎,从整体上了解引擎的工作原理,包括打开文件、排版、渲染、翻页等环节。 打开文件获取 ... 阅读全文 »
Txt引擎之切章重构之路 发表于 2019-01-01 | 分类于 iOS C++ 字数统计: 8,990 | 阅读时长 ≈ 36 前言由于诸多历史原因,QQ阅读iOS App目前的Txt引擎只能支持单个文件的加载、排版和渲染,所以在处理在线章节阅读的切换时,只能先把当前阅读的章节的引擎关闭掉,清理掉所有的业务数据,然后重新加载新的章节的引擎,重新拉取新章节的业务信息。在这种情况下,存在着2个严重的缺陷: 在两个章节的临界点 ... 阅读全文 »
雪花飘飘 发表于 2018-11-13 | 分类于 matlab 字数统计: 703 | 阅读时长 ≈ 3 前言 去雪本文主要是借用卡尔曼滤波器的特性来追踪雪花,从而达到去除静态背景图中雪花的目的。关于卡尔曼滤波器的原理,参考这里。这里直接上代码,考虑到矩阵操作的便利性,所以选择了matlab进行试验,工程性选择还是应该首选opencv和c++ matlab代码1234567891011121314151 ... 阅读全文 »
iOS问题集锦 发表于 2018-11-13 | 分类于 iOS 字数统计: 6,957 | 阅读时长 ≈ 33 前言JavaScriptCore引擎的分析由于其复杂性,耗时性,暂时先告一段落,后续会进行回归,本篇将总结一些日常开发中遇到的问题 问题列表启动图之前在做视频闪屏的时候,遇到了一个比较棘手的问题:每次加载本地视频都会有一段黑屏的时间(大概0.2s左右),这本身和AVPlayer有很大的关系,猜测和视 ... 阅读全文 »
JavaScriptCore引擎深度解析6——LLInt解释器篇 发表于 2018-09-20 | 分类于 iOS C++ 字数统计: 1,366 | 阅读时长 ≈ 7 前言运行指令字节码(ByteCode)是JavaScriptCore引擎中很核心的部分,各家JavaScript引擎的优化也主要集中于此。JSByteCode的解释执行是一套很复杂的系统,特别是加入了OSR和多级JIT技术之后,整个解释执行变的越来越高效,并且让整个ByteCode的执行在低延时之间 ... 阅读全文 »