[转载] 编译系统(Compilation-System)和编译流程(Compilation-Pipeline)到底是什么
在编译到底是什么一文中,我们了解了编译在计算机编程中扮演的角色和作用,这次我们将探讨编译系统是由哪些角色组成的!
[转载] 编译系统(Compilation-System)和编译流程(Compilation-Pipeline)到底是什么
在编译到底是什么一文中,我们了解了编译在计算机编程中扮演的角色和作用,这次我们将探讨编译系统是由哪些角色组成的!
[转载] 从预编译的角度理解Swift与Objective-C及混编机制
本文从预编译的基础知识入手,由浅至深的介绍了 Objective-C 和 Swift 的工作机制,并通过这些机制来解释混编项目中使用到的技术和各种参数的作用,由此来指导开发者如何进行混编。
写在前面
本文涉及面广,篇幅较长,阅读完需要耗费一定的时间与精力。如果你带有较为明确的阅读目的,可以参考以下建议进行阅读:
如果你对预编译的理论知识已经了解,可以直接从【原来它是这样的】的章节开始进行阅读,这会让你对预编译有一个更直观的了解。
如果你对 Search Path 的工作机制感兴趣,可以直接从【关于第一个问题】的章节阅读,这会让你更深刻,更全面的了解到它们的运作机制,
如果您对 Xcode Phases 里的 Header 的设置感到迷惑,可以直接从【揭开 Public、Private、Project 的真实面目】的章节开始阅读,这会让你理解为什么说 Private 并不是真正的私有头文件
如果你想了解如何通过 hmap 技术提升编译速度,可以从【基于 hmap 优化 Search Path 的策略】的章节开始阅读,这会给你提供一种新的编译加速思路。
如果你想了解如何通过 VFS 技术进行 Swift 产物的构建,可以从 【关于第二个问题】章节开始阅读,这会让你理解如何用另外一种提升构建 Swift 产物的效率。
如果你想了解 Swift 和 Objective-C 是如何找寻方法声明的,可以从 【Swift 来了】的章节阅读,这会让你从原理上理解混编的核心思路和解决方案。
[转载] 一款可让大型iOS工程编译速度提升50%的工具
本文介绍了美团平台自研的一款 cocoapods 插件,该插件可以大幅提升 iOS 工程代码的编译速度。文章前半部分主要介绍相关的原理,后面主要阐述在工程层面的实践,希望能给从事相关开发的同学带来一些帮助或者启发。
cocoapods-hmap-prebuilt 是美团平台迭代组自研的一款 cocoapods 插件,以
Header Map 技术 为基础,进一步提升代码的编译速度,完善头文件的搜索机制。
[转载] 快手主播稳定性 - Mach Port 超限问题治理
本文介绍了快手客户端团队处理的 Mach Port 超限导致异常退出的问题。介绍了从发现到解决的全过程,并且给出了监控和防劣化方案。这个问题对快手稳定性尤其是电商主播稳定性影响很大且难以察觉,同时可能在业界广泛出现。
5分钟看懂的WebAssembly入门指南
本文是一篇WebAssembly的入门文章,从理论介绍到实战方面有全面的讲述。
由于 javascript 的动态类型特性,AOT 并不能为它做出优化,只能选择 JIT 来优化。
而为了让 JIT 效率提高,Mozilla 推出了 asm.js。它和 Typescript 比较相似的是它也是一个强类型语言,不过它的语法是 js 的子集,它专为 JIT 效率提高而打造。
在 Mozilla 推出 asm.js 之后,一些公司都觉得这个思路不错,于是联合起来推出了 WebAssembly。
WebAssembly 是一套指令集(字节码)标准,不过它并不是可以被 CPU 直接执行的原生指令集,所以它目前还需要配套一个虚拟机(low-level)来执行。
[转载] Objective-C & Swift 最轻量级 Hook 方案
本文从一个 iOS 日常开发的
hook案例入手,首先简要介绍了 Objective-C 的动态特性以及传统hook方式常见的命名冲突、操作繁琐、hook链意外断裂、hook作用范围不可控制等缺陷,然后详细介绍了一套基于消息转发机制的 instance 粒度的轻量级hook方案:**SDMagicHook**。
[转载] 抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15%
启动是App给用户的第一印象,对用户体验至关重要。抖音的业务迭代迅速,如果放任不管,启动速度会一点点劣化。为此抖音iOS客户端团队做了大量优化工作,除了传统的修改业务代码方式,我们还做了些开拓性的探索,发现修改代码在二进制文件的布局可以提高启动性能,方案落地后在抖音上启动速度提高了约15%。
本文从原理出发,介绍了我们是如何通过静态扫描和运行时trace找到启动时候调用的函数,然后修改编译参数完成二进制文件的重新排布。
Diff应用:从LCS到UICollectionView
什么是Diff?
日常编程中有时候会遇到对比字符串,对比数组的情况,找出前后新旧数据的不同,可以称之为Diff。
什么是LCS?
Longest Common Subsequence 的简称,最长公共子序列。
LCS有哪些应用?
1.Git等版本控制,常用的git diff命令
2.一些对比软件,如Kaleidoscope,能进行图片、文件、文本的对比
3.Facebook iOS Snapshot Test框架,通过snapshot的方式,进行页面UI测试
4.IGListKit一个基于UICollectionView的框架,通过LCS衍生优化算法,进行UICollectionView的刷新
关于本文…
前几部分都是LCS算法的一些简单介绍,感兴趣的可以看看,也可直接看靠后的LCS算法在UICollectionView中的应用。
[转载] 基于NSURLCache的缓存实现
缓存设计应该是每个客户端程序开发所必须考虑的问题,如果同一个功能需要多次访问,而每次访问都重新请求的话势必降低用户体验。但是如何处理客户端缓存貌似并没有统一的解决方案,多数开发者选择自行创建数据库直接将服务器端请求的JSON(或Model)缓存起来,下次请求则查询数据库检查缓存是否存在。事实上iOS系统自身也提供了一套缓存机制,本文将结合URL Loading System简单介绍一下如何利用系统自身缓存设计来实现一套缓存机制来平滑的扩展图虫客户端的缓存处理。