LRU(Least recently used)是一种缓存更新策略,即当缓存数目达到最大容量、或者某个条件时,移除掉最近最少使用的元素。微信前不久开源了一个客户端Key-Value存储库MMKV https://github.com/Tencent/MMKV ,其中实现了这样一个十分精简的LRU缓存(LRUCache类)。
...
tl;dr
点击App图标后,iOS系统的桌面SpringBoard会先创建LaunchScreen,然后创建App对应的进程。那么可以这样认为:LaunchScreen的加载是不占用App进程自身感知到的启动时间的。LaunchScreen是SpringBoard为了用户体验,提前在进程启动之前展示给用户看的。
当然严格来说,LaunchScreen的加载占用了系统的CPU等资源,也会对App的启动时间有一定的影响。
...
FastImageCache 是一个使用空间换时间的加速图片加载/渲染的库。官方(https://github.com/path/FastImageCache)的README比较详细的解释了原理。这篇文章就结合源码再次温习一遍最核心的部分。
...
iOS中的App也存在多进程架构,而且是从iOS6就开始了,只是苹果一直自己在用。
需求来源
iBooksLookUpCloser 发布到bigboss后的第二天,一位老外朋友就发来邮件,让我看看这个一个月前reddit的提问 https://www.reddit.com/r/jailbreak/comments/95vjgd/request_please_some_one_fulfill_this_request_pull/?st=JLMLKHHM&sh=093359ff 。
关于iBooksLookUpCloser参考上篇文章 https://everettjf.github.io/2018/09/03/ibooks-dictionary-close-tweak/ 。
...
地铁时间一直使用iBooks看电子书,不认识的单词太多,也就很喜欢使用iBooks自带的长按单词点击Look Up(查询)按钮来查单词。又由于习惯了左手拿手机,右手扶地铁把手……查完单词后,关闭按钮在右上角。这篇文章就简单讲下怎么在左下角加上个“Done”按钮。如下图:
于是我查单词更勤快了。
...
mmap是性能优化的必备神器,这篇文章简单罗列下相关信息。
...
逆向工程可以让我们对系统的原理理解的更深刻,也可以让我们去窥视感兴趣的App,很好玩,也可能很邪恶。
目前(2018年8月30日)普通人能接触到的最新的可越狱的iOS版本是iOS11.3.1,可以在 https://canijailbreak.com/ 上看到,这篇文章就简单讲下iOS11.3.1的越狱步骤,为未来我们以性能优化为目的的逆向工作做铺垫。
...
一个“有年头”的App,启动中要做的工作不断的累加,didFinishLaunchingWithOptions中的代码越来越长,AppDelegate.m文件的行数也越来越多。那么是时候分类存放了。
...
本文仅供学习参考,但介绍的方法性能不好。推荐使用 https://github.com/huakucha/TTAnalyzeLoadTime ,这个性能会更好。
大概两年前刚开始做性能优化工作,为了Hook所有+load方法,是用Hopper先列出所有+load,然后使用CaptainHook在动态库中逐个指定类名来Hook每一个+load方法。写了一篇文章,先后发表到了内网(ATA)和博客,博客文章地址是: https://everettjf.github.io/2017/01/06/a-method-of-hook-objective-c-load/ 。
这个方法有两个缺点:
需要先静态分析(使用Hopper)来看到所有+load方法,或者使用objc runtime的方法获取所有包含+load方法的类名。很麻烦。
对Category中的+load方法,没有办法Hook。
当时也意识到了这两个缺点,但迫于时间也凑合够用了。
时隔两年,想来了结这个心愿。这篇文章就把这两个缺点弥补上,实现:Hook所有的+load方法,包括Category中实现的+load方法。
...
os_signpost API 是 iOS12 新增的轻量级代码性能分析工具,可以采集数据并可视化。官方原话是 The os_signpost APIs let clients add lightweight instrumentation to code for collection and visualization by performance analysis tooling.
...