加载中
WKWebView的local storage数据同步的问题

最近在开发过程中遇到这样一个问题: webView1中加载了一个H5,webView2中加载了同样的一个H5,该H5是一个搜索页面,通过Local storage来持久化搜索记录,但是在webView1搜索的记录并没有及时...

2021/08/31 18:30
60
启动优化(二)——二进制重排

上篇文章我们讲了虚拟内存。应用程序在运行的时候会有一个虚拟内存,虚拟内存是分页管理的,它通过页表映射到物理内存上面。分页管理有一个特点,当加载新的一块功能的时候,对应的某一页数据...

启动优化(一)

今天来聊聊启动优化。 启动分为两种类型,一个是冷启动,一个是热启动: 冷启动:指App被后台杀死后,在killed状态打开App。 热启动:指App没有被后台杀死,仍然在后台运行,此时再次去打开A...

2021/04/01 10:11
51
fishhook详解

在正式开启对fishhook的讲解之前,我先对之前的dyld的内容(应用程序的加载——dyld动态链接器的工作流程)做个回顾。 如上图所示,MachO是可执行文件,其结构分为三大块: Header:包含CPU...

2021/03/31 11:38
25
LLVM(二)——Clang插件

LLVM的下载 由于国内的网络限制,我们需要借助镜像来下载LLVM的源码: https://mirror.tuna.tsinghua.edu.cn/help/llvm/ 执行如下命令下载LLVM项目的源码: git clone https://mirrors.tuna...

2021/03/30 06:24
131
LLVM(一)——编译流程

一、编译型语言 VS 解释型语言 我们程序员编写的源代码是人类语言,我们可以很轻松得理解;但是对于计算机硬件(CPU)而言,这些源代码就好比是天书,它根本无法理解,更无法直接执行。计算机...

Block原理详解(二)

Block的拷贝 通过上篇文章Block原理详解(一)我们知道,block是在block_copy函数中执行拷贝操作的,所以我就从这个函数开始研究。 _Block_copy函数的源码如下: void *_Block_copy(const vo...

2021/03/28 06:15
50
Block原理详解(一)

关于Block,我之前已经写了三篇文章了,按照时间顺序分别为: Block以及Block的循环引用 Block Block 的高级使用 今天这篇文章也是在前面这三篇文章的基础上,再结合自己最近的一些工作感悟,...

2021/03/27 10:41
26
锁的使用以及底层原理

之前在多线程——锁🔐中我有总结过锁,看本文之前可以先看看那篇文章。 @synchronized 我们知道,@synchronized是一把互斥锁(互斥锁保证在任何时刻都只能有一个线程访问该对象),它通过大...

2021/03/25 12:34
51
GCD原理探究(一)——创建队列

iOS内存的五大区 1,栈区,由编译器自动分配并释放,在运行的时候分配,用于存储函数的参数、局部变量、指针等。 2,堆区,由开发者分配和释放(如果开发者不释放,那么在程序结束的时候可能...

2021/03/23 09:09
30
KVO详解(二)

自定义KVO 上篇文章中我介绍了KVO的简单用法以及KVO的实现细节,为了加深对KVO的理解,我决定从头到尾介绍一下如何自定义KVO。 点进KVO的API,我发现所有的KVO的API都是通过类目的形式实现的...

KVO详解(一)

我在之前的文章iOS开发中的设计模式--观察者模式中有介绍过KVO的简单使用,大家可以先去了解一下。今天呢,我们来详细分析下KVO。 跟KVC的分析一样,我们首先去查看一下KVO的官方文档,打开如...

KVC原理分析

之前我写过两篇文章详细介绍过KVC的用法: KVC详解(上) KVC详解(下) 这篇文章是在上述两篇文章的基础上做一个原理性的补充。 首先呢,我们来聊一聊苹果开发文档。不知道诸位在平时开发中...

2021/03/14 17:36
177
聊几道面试题

一、Runtime是什么 Runtime System实际上是一个C、C++写的底层库,即一套API,系统在编译完代码之后,在运行的时候还需要依赖Runtime System才能够完整的、确定的代码。这就是Runtime。 我们...

2021/03/10 21:13
50
weak的底层原理

我们经常会使用weak来解决OC中的循环引用问题,因为weak不会使引用计数加1;并且weak修饰的指针还会在对象被销毁后自动置空,这有效的解决了野指针调用的问题。 那么weak 的底层原理是怎样的...

2021/03/06 20:07
85
类的加载(三)

今天来聊聊类的扩展。 首先来看看扩展和分类的区别 格式上,扩展是匿名的分类 我们在OC的.m文件中,经常会使用扩展对某类进行私有的属性或者成员变量的声明,如下: 然后我们再来看一下类目的...

2021/02/28 17:15
25
类的加载(二)

面试题——如何动态创建一个类 通过前面文章的介绍,我们已经对rw和ro之间的关系有过了解了,本篇文章首先通过一个面试题来加深下诸位对ro和rw的理解,也进一步熟悉下Runtime的API。 题目是:...

类的加载(一)

在上篇文章应用程序的加载——dyld动态链接器的工作流程中,我们聊了动态链接器dyld,知道了dyld最终会走到objc库的初始化函数_objc_init,接下来我们就来分析一下这个函数。 一、_objc_ini...

2021/02/19 16:04
17
应用程序的加载——dyld动态链接器的工作流程

每一个应用程序都会依赖很多底层库、第三方库、自己的组件库、模块库等,这些库本质上是可执行的二进制文件,而这些二进制文件是可以被操作系统写入到内存的,我们日常所说的加载库就是指的将...

消息转发流程的源码探究

对象原理探究(一) 对象原理探究(二) OC类的原理探究(一) OC类的原理探究(二)——方法的缓存 方法的查找流程——快速查找 方法的查找流程——慢速查找 注:在阅读本文之前,请先阅读我...

没有更多内容

加载失败,请刷新页面

返回顶部
顶部
返回顶部
顶部