首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
vony
掘友等级
获得徽章 7
动态
文章
专栏
沸点
收藏集
关注
作品
赞
1
文章 1
沸点 0
赞
1
返回
|
搜索文章
最新
热门
iOS App启动优化(四):编译期插桩 && 获取方法符号
编译器插桩就是在代码编译期间修改已有的代码或生成新代码。 编译期时,在每一个函数内部二进制源数据添加 hook 代码来实现全局 hook 效果。 说白了我们要跟踪到 每个方法的执行,从而获取到启动时 方法执行的顺序,然后再按照这个顺序去编写order file。 文档是个好东西…
iOS App启动优化(三):二进制重排
我们可以看到图中项目的Page Fault 数量并不多,这是因为当前项目是一个demo,代码和文件都极少。当代码多起来的话,Page Fault的 数量和加载耗时都会随着代码增加而增加。 二进制重排 可以很好优化这个问题,其中心思想是重新排列 方法符号的顺序, 使启动的相关方法…
iOS Link Map File 文件说明
Link Map File 直译为 链接映射文件,是 Xcode 生成可执行文件时一起生成的文本,用于记录链接相关信息。 Xcode 在生成可执行文件的时候默认情况下不生成该文件。 Mach-O 文件中的虚拟地址最终会映射到物理地址上。这些地址被分成不同的Segement: _…
iOS App启动优化(二):物理内存和虚拟内存
内存是分页管理的,映射表不能以字节为单位,是 以页为单位。 早期的计算机不断启动应用,到达一定数量以后会报错,应用无法正常运行,必须先关闭前面的部分应用才能继续开启。 这是因为早期计算机没有虚拟地址,一旦加载都会 全部加载到内存中 。一旦物理内存不够了,那么应用就无法继续开启。…
iOS App启动优化(一):检测启动时间
冷启动:指APP被后台kill后重新启动APP,这种启动方式叫做冷启动。 热启动:APP的状态由running切换为suspend,APP 没有被kill仍然在后台运行。再次把APP切换到前台,这种启动方式叫热启动。 Xcode 中提供了测量 pre-main 的时间 Edit…
解决 zsh-autosuggestions 插件导致的粘贴卡顿
zsh在autosuggestions插件开启的状态下,粘贴大量的内容的时候会卡顿得一个字符一个字符粘贴。
iOS 编译LLVM
由于最新的LLVM支持cmake来编译了,我们还需要安装cmake。 编译,选择 ALL_BUILD Secheme,编译的时间会比较长,预计1+小时。
iOS LLVM及编译过程
优化器端的任务是改善代码的运行时间,例如消除冗余运算等。 OC、c、c++ 使用的编译器前端是clang;Swift使用的是Swift;后端都是LLVM。 传统的编译器设计把前端、优化器、后端集成在一起,需要支持新语言或新硬件结构时就必须重新开发一套编译器。LLVM的设计模式很…
iOS 方法调用/消息发送详解(objc_msgSend)
可以看到第18行sayHi被存入了rsi寄存器。17行好像还把什么存进了rax寄存器。打印出来看看,是一个LGperson对象。 我们来看看objc_msgSend是怎么定义的。第一个参数是id类型的消息处理者、第二个是SEL类型的方法表示。如果有需要的话后面还会跟上其他参数。…
iOS 类的数据结构
内部结构如下,需要注意的是objc_class继承自objc_object,那么里面就应该有一个isa。 接下来看bucket_t是什么,bucket_t有2个成员变量_imp和key,这不用多说肯定是方法和关键值。那么我们就可以猜想,是不是能根据key获取到对应的IMP,进行…
下一页
个人成就
文章被点赞
506
文章被阅读
231,722
掘力值
4,718
关注了
43
关注者
483
收藏集
1
关注标签
13
加入于
2018-12-04