首页
沸点
课程
数据标注
HOT
AI Coding
更多
直播
活动
APP
插件
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
joker_king
掘友等级
iOS开发工程师
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
11
文章 8
沸点 3
赞
11
返回
|
搜索文章
最新
热门
iOS KVO 底层原理
KVO是一种机制,他是建立在KVC的基础上的,他可以将其他对象属性值的变化通知给对象。 使用方法addObserver:forKeyPath:options:context:将观察者注册到观察对象。 observeValueForKeyPath:ofObject:change:…
iOS 底层面试
Runtime是一套API,有C C++ 汇编写成,为OC语言加入了面向对象和运行时功能。 运行时(Runtime)是指将数据类型的确定由编译时推迟到了运行时。(例如extension-category的区别)。 平时写的OC代码,在运行时会被转换成Runtime的C语言代码,…
iOS load_images
在objc的开源代码中注释是这么写的。 接下来我们来看看load_images的源码。 这段代码中主要包含两个部分,一个是prepare_load_methods,一个是call_load_methods。 在这个阶段主要做了以下几件事情。 获取所有的非懒加载类(也就是实现了+…
iOS 关联对象
从OS X v10.6开始可用的关联引用模拟了将对象实例变量添加到现有类中。使用关联引用,可以在不修改类声明的情况下将存储添加到对象。如果您无权访问该类的源代码,或者由于二进制兼容性原因而无法更改该对象的布局,则这可能很有用。 关联基于密钥。对于任何对象,您都可以根据需要添加任…
iOS 类拓展的加载
类拓展就是一个匿名的分类。 给当前的类增加属性和方法。 我们继续来到_read_images中来一探究竟。 我们在_read_images的这个地方做一个小的处理并且打上断点查看ro中是否存在我们需要的数据。 通过上面的lldb调试我们可以看到,类拓展在我们的类被加载之前就已经…
iOS 分类的加载
通过objc的源码可知我们在从Mach-O中读取分类时分为两中。 懒加载分类,也就是没有实现+(void)load方法的分类。 通过两次的断点调试,我们发现懒加载的分类,在运行时期间没有进行添加分类的操作,我们来看看分类中的方法是否被添加进来。 通过上述的lldb调试,我们发现…
iOS 类的加载(懒加载类)
在上一篇文章中我们见到了非懒加载类的加载,那么现在我们来探究一下懒加载类的加载。那么首先我们需要明确的是什么是懒加载类。 懒加载,顾名思义,是平时不会被加载,只有在用到的时候才会被加载。非懒加载类和懒加载类的区别就是,我们是否实现了+(void)load方法。从objc的源码中…
iOS 类的加载(非懒加载类)
在我们日常的开发中我们最常见的就是类,那么我们我们声明的类是如何被系统加载进来的呢?接下来我们就围绕着这个话题进行探索。 我们的dyld在初始化主程序时来到_objc_init函数中并注册了相应的回调函数。 处理由dyld映射的镜像文件。 这段代码的主要作用就是,为我们创建两张…
iOS 消息转发机制
我们再来回顾一下方法查找流程的代码。以下代码只摘录出主要部分 我们可以发现在查找到方法的实现后,调用了log_and_fill_cache函数,用来做缓存填充和log输出,接下来我们来看一下这个函数的实现。 如果objcMsgLogEnabled为真,那么将会输出一写log的日…
iOS 消息查找流程
在上次的objc_msgSend分析的文章中,我们得知,方法的本质就是调用objc_msgSend函数来发送消息。 接下来我们通过在代码中打断点来跟进一下这个流程。 我们将断点的显示模式改为汇编显示。 然后将代码运行起来。 我们可以很清楚的看到,对象在调用方法时,底层是通过调用…
下一页
个人成就
文章被点赞
48
文章被阅读
68,424
掘力值
1,763
关注了
11
关注者
40
收藏集
1
关注标签
16
加入于
2017-12-14