首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
云先生
掘友等级
iOS开发工程师
|
家里蹲
只争朝夕 不负韶华
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
20
文章 20
沸点 0
赞
20
返回
|
搜索文章
最新
热门
十二:底层探索 - weak的实现原理
通过跟踪汇编和下符号断点的方式,我们把目标指向了objc_initWeak。 1. objc_initWeak 2. storeWeak 此处我们看到代码中涉及到一个SideTable,可以看这篇文章 了解一下。SideTable在底层也是一个结构体类型,而对weak对象就是通…
优化篇
头部告诉我们具体链接了哪些.o文件,而这个顺序是和Build Phases中的Compile Sources顺序保持一致。后面是 上述文件中最左侧地址就是 实际代码地址而并非符号地址 , 因此我们二进制重排并非只是修改符号地址 , 而是利用符号顺序 , 重新排列整个代码在文件的…
内存管理
如果我们声明一个weakSelf的self代入呢?依然无法解决循环引用问题,这种方法只会应用在block内部,这里既是使用weakSelf,只是一个参数,其实找到的依然是self,timer内部可能会有个参数对target进行了强引用。 原因:本质上self.name = [N…
多线程
1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源。 比如多个线程访问同一个对象、同一个变量、同一个文件。 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题。 性能不好,内部加锁会调用objc_sync_enter。解锁会调用objc_sync_exi…
Runloop
如果有了Runloop,程序不会马上退出,而是继续保持运行状态。 mach_msg() 函数实际上是调用了一个 Mach 陷阱 (trap),即函数mach_msg_trap(),陷阱这个概念在 Mach 中等同于系统调用。当你在用户态调用 mach_msg_trap() 时会…
Runtime
在arm64架构之前,isa就是一个普通的指针,存储着Class、Meta-Class对象的内存地址。从arm64架构开始,对isa进行了优化,变成了一个共用体(union 共用一块内存)结构,还使用位域来存储更多的信息。 找到索引对应的方法如果是要找的,直接返回imp,不是要…
Block
8.1. 当block在栈上时,对它们都不会产生强引用 8.2. 当block拷贝到堆上时,都会通过copy函数来处理它们 8.3. 当block从堆上移除时,都会通过dispose函数来释放它们
Category
1.Category的实现原理?分类中的所有方法最终都会在运行时将方法合并到类对象的方法列表中Category的底层结构是Category_t的结构体,里面存放着对象方法,类方法,协议等等信息在运行时
十一:底层探索-load_images,类拓展,关联对象
遍历懒加载分类的操作几乎和类一样,此处就不做展开,有兴趣的可以看下源码。 我们连分类的加载之前都研究了,那这里我们就分析下与分类相关的内容。 Objective-C 2.0中,出现category这个语言特性,可以动态地为已有类添加新行为。如今category使用广泛,从App…
十:底层探索 - 分类的加载
在上一篇章对read_image进行分析的时候,其中也有对分类的处理,系统的分类我们不关注,只关注我们自己的分类是如何加载的,我们添加一段代码进行打印我们自己写的分类。 类别和类常常是共同存在的,没有类的存在,分类也没有存在的必要。现在我们知道不管是类还是分类,都存在非懒加载和…
下一页
个人成就
文章被点赞
27
文章被阅读
11,775
掘力值
506
关注了
137
关注者
14
收藏集
22
关注标签
19
加入于
2019-10-23