自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

俊而不逊的博客

https://github.com/ZJPRENO

  • 博客(11)
  • 资源 (1)
  • 收藏
  • 关注

原创 iOS 面试题分析(二)

1.回顾在之前的博客中,对OC底层进行了一系列的源码的探索分析,上一篇博客也对一些面试题进行了回答和分析,本篇博客继续面试题分析!2. iOS面试题分析2.1 ⽅法的本质?sel是什么?IMP是什么?两者之间的关系⼜是什么?方法的本质:发送消息流程快速消息查找 (objc_msgSend),cache_t 缓存查找消息。慢速消息查找(lookUpImpOrForward)递归自己以及父类,自己找不到去父类缓存中找,依然找不到会进行父类慢速查找,直到找到nil。查找不到消息进行动态方法解

2021-07-30 12:04:04 320

原创 iOS 面试题分析(一)

目录1.回顾1.1 补充2. iOS面试题分析2.1 load与c++构造函数调用顺序2.2 runtime是什么?2.3 initialize调用顺序2.4 同名分类方法的调用顺序2.5 分类和扩展的区别?1.回顾在之前的博客中,对OC底层进行了一系列的探索分析,相信小伙伴们都学到了一定的知识,但是底层源码分析比较枯燥,那么本次就对一些面试题进行分析。1.1 补充在上篇博客iOS底层探索之类的加载(四):类的关联对象AssociatedObject中主要讲了类的扩展和类的关联对象,移除关联还没有讲

2021-07-29 13:52:59 390

原创 iOS底层探索之类的加载(四):类的关联对象AssociatedObject

1. 回顾在前面的几篇博客中,主要讲了类的加载、包括分类的加载底层探索,本次就类的扩展和关联对象进行分析。iOS底层探索之类的加载(三): attachCategories分析2. 扩展2.1 什么是分类和扩展首先我们来看看什么是分类和扩展category: 类别/分类专门用来给类添加新的方法不能给类添加成员属性,添加了成员变量,也无法取到注意:其实可以通过runtime给分类添加属性分类中用@property定义变量,只会生成变量的 getter,setter方法的声明,不能生成

2021-07-27 17:31:40 433

原创 iOS底层探索之类的加载(三): attachCategories分析

1.回顾在上篇博客中,已经对类的加载有了一定的了解,分类的加载也定位到了attachCategories方法中,那么本篇博文将对分类进行探索分析!iOS底层探索之类的加载(二): realizeClassWithoutSwift分析2. 分类分析2.1 分类加载路线在上篇博客中通过反推,已经确定了分类加载的两条路线,分别是:methodizeClass --> attachToClass --> attachCategoriesload_images --> loadAl

2021-07-21 17:38:43 575 4

原创 iOS底层探索之类的加载(二): realizeClassWithoutSwift分析

1. 回顾在上篇博文中,已经从dyld到_objc_init再到read_images整个流程串联起来了,最后定位到了类的初始化是在realizeClassWithoutSwift中,本篇博文将深入分析类的加载,请搬好板凳做下仔细往下看。iOS底层探索之类的加载(一):read_images分析2.realizeClassWithoutSwift在read_images流程中,会对类进行一些修复工作,同时会将类的名称与类进行关联,插入对照表中,并更新到内存中的类表。rw和ro的处理我们还不得而

2021-07-20 18:16:28 768 2

原创 iOS底层探索之类的加载(一):read_images分析

1. 回顾在前两篇博文中,已经对dyld动态链接器的底层源码进行了探索分析,但是dyld链接images镜像文件到内存的过程我们还不知道,接下来的几篇博文就着重去探索。iOS底层探索之dyld(上):动态链接器流程分析iOS底层探索之dyld(下):动态链接器流程源码分析_objc_init方法向dyld中注册了回调函数,下面就补充一点内容,探究下_objc_init方法。2. _objc_init简单分析先来看看_objc_init的底层源码void _objc_init(void

2021-07-19 17:13:05 850

原创 iOS底层探索之dyld(下):动态链接器流程源码分析

1.回顾在上一篇博文中介绍了动态库和静态库的区别,对dyld动态链接器做了初步的探索分析,本篇博文就进一步的对dyld的源码进行分析。2. MachO在上篇文章中,已经找到了dyld的入口了,但是在分析源码之前,还得补充点内容。在iOS中Mach-O(可执行文件)怎么获取呢?2.1 macOS工程查看MachO直接编译运行之后就可以得到Mach-O,就是下面这个黑不溜秋的东西。2.2 iOS工程查看MachOiOS工程的话就需要找到Products里面的.app文件然后Sh

2021-07-16 16:12:40 763 2

原创 iOS底层探索之dyld(上):动态链接器流程分析

1. 前言现在的互联网行业,是一天比一天卷,除了底层是必考点了,还有关于APP的性能优化也是面试常问的点。在优化之前必须要对应用程序加载的流程熟悉,那么本次博文就对dyld进行底层的初步探索分析。2. 程序加载原理2.1 代码编译过程我们都知道代码编写完成,必须通过编译器编译才能变成可以执行的文件。程序的执行,是把可执行的文件,加载到内存中去执行的,这个可执行的文件(Mach-O)的运行必须依赖很多的库(.a/.lib/.so),库是可执行的二进制文件,是能够被加载到内存中去的。这些库,可以

2021-07-13 17:10:11 957 2

原创 iOS底层探索之Runtime(五): 消息转发

1.回顾在上篇博文iOS底层探索之Runtime(四): 动态方法解析已经分析了动态方法解析阶段,本次内容主要对消息发送的第三个阶段——>消息转发进行分析。2. 快速转发3. 慢速转发4. 方法签名2. 总结...

2021-07-09 17:46:26 503

原创 iOS底层探索之Runtime(四): 动态方法解析

1. 回顾iOS底层探索之Runtime(一):运行时&方法的本质iOS底层探索之Runtime(二): objc_msgSend&汇编快速查找分析iOS底层探索之Runtime(三): lookUpImpOrForward慢速查找分析在上一篇博文中,介绍了Runtime的慢速查找流程lookUpImpOrForward,本章内容主要分析动态方法解析流程。在缓存中、自己的class_rw_t中、父类的cache中、父类的class_rw_t中都没有找到imp,就会进入objc

2021-07-08 14:01:02 616 2

原创 iOS底层探索之Runtime(三): lookUpImpOrForward慢速查找分析

1. 回顾iOS底层探索之Runtime(一):运行时&方法的本质iOS底层探索之Runtime(二): objc_msgSend&汇编快速查找分析在前面的文章中介绍了消息发送(objc_msgSend)流程,主要是汇编快速查找cache的过程,并对汇编源码进行了分析,本章内容主要分析慢速查找_lookUpImpOrForward流程。2. _lookUpImpOrForward在汇编的快速查找没有找到缓存,就会进入__objc_msgSend_uncached,在__objc_

2021-07-01 15:56:20 787 4

iOS面试相关的一些题

这是一些关于iOS的面试题,希望可以帮助到大家,能提高大家的一些知识面。

2019-01-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除