首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
确定删除此收藏集吗
删除后此收藏集将被移除
取消
确定删除
确定删除此文章吗
删除后此文章将被从当前收藏集中移除
取消
确定删除
编辑收藏集
名称:
描述:
0
/100
公开
当其他人关注此收藏集后不可再更改为隐私
隐私
仅自己可见此收藏集
取消
确定
底层
订阅
超人猫哆哩
更多收藏集
微信扫码分享
微信
新浪微博
QQ
69篇文章 · 0订阅
类的结构(补充)
前言 上一篇已经探究了类的结构,并得出初步的结论:在类中含有4个成员变量:isa、superclass、cache、bits,大概如图所示: 在磁盘上的类是这样的: 取自WWDC2020,首先有这个类
Objective-C 消息发送与转发机制原理
为啥老用伪代码?因为 objc_msgSend 是用汇编语言写的,针对不同架构有不同的实现。如下为 x86_64 架构下的源码,可以在 objc-msg-x86_64.s 文件中找到,关键代码如下: 从上面的代码可以看出方法查找 IMP 的工作交给了 OC 中的 _class_…
iOS内存管理之autorelease
当你需要延迟调用release方法的时候会使用autorelease。如: 在上面代码中,通过alloc生成并持有对象,根据iOS内存管理规则,在失去对象的引用之前,我们必须要放弃该对象的所有权。如果使用release,那么对象在返回之前就会失去所有权,导致返回一个无用的对象。…
探秘Runtime - Runtime Message Forward
当一个对象的方法被调用时,首先在对象所属的类中查找方法列表,如果当前类中没有则向父类查找,一直找到根类NSObject。 当一个方法没有实现时,也就是在cache lsit和其继承关系的method list中,没有找到对应的方法。 可以通过重写resolveInstanceM…
今天,我们来探一探WebSocket原理
WebSocket = “HTTP第1次握手” + TCP的“全双工“通信 的网络协议。 首先,通过HTTP第一次握手保证连接成功。 其次,再通过TCP实现浏览器与服务器全双工(full-duplex)通信。(通过不断发ping包、pang包保持心跳) 最终,使得 “服务端” …
iOS 底层探索 - alloc & init
作为 iOS 开发者,我们每天打交道最多的应该就是对象了,从面向对象设计的角度来说,对象的创建以及初始化是最基础的内容。那么,今天我们就一起来探索一下 iOS 中最常用的 alloc 和 init 的底层是怎么实现的吧。 对于第三方开源框架来说,我们去剖析内部原理和细节是有一定…
KVO探索
大家都知道kvo是一种设计模式,是一种键值观察,当属性的值改变时候会触发回调,获取该属性的旧值和新值。但是可能有些朋友不清楚什么时候用它,使用场景是什么。当需要监听一个属性的值改变时候我们可以用到它。比如: 当图片的url改变时候自动加载新的图片。 当scrollView的of…
从源码理解Category、load和initialize
Objective-C中的Category就是对装饰模式的一种具体实现。它的主要作用是在不改变原有类的前提下,动态地给这个类添加一些方法。 从源码中可以知道,分类转化成了_category_t类型的结构体,并且有几个分类,就会对应生成几个这样的结构体。这里有一点要说明一下,在o…
详解iOS中分类Cateogry
的结构体,里面有名称,对象方法列表,类方法列表,协议方法列表,属性列表,如果对应的为空,比如协议为空,属性为空,那么结构体中保存的就是0。 合并分类的时候,其方法列表等,不会覆盖掉原来类中的方法,是共存的。但是分类中的方法在前面,原来的类中的方法在后面,调用的时候,就会调用分类…
探秘Runtime - Runtime消息发送机制
在OC中方法调用是通过Runtime实现的,Runtime进行方法调用本质上是发送消息,通过objc_msgSend()函数进行消息发送。 例如下面的OC代码会被转换为Runtime代码。 发送消息的第二个参数是一个SEL类型的参数,在项目里经常会出现,不同的类定义了相同的方法…