首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
罗德
掘友等级
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
34
文章 34
沸点 0
赞
34
返回
|
搜索文章
赞
文章( 34 )
沸点( 0 )
Mach-O文件结构
主要内容: 理解可执行文件 理解Mach-O文件 Mach-O文件结构 Mach Header Load Commands Data 理解大小端模式 理解通用二进制文件 一、理解可执行文件 1.可执行
iOS开发 — RunLoop底层分析
从源码中可以得知RunLoop本质上是一个do-while循环,但跟普通循环不同的是,RunLoop可以做到让线程不需要处理任务的时候就休眠,需要处理任务就忙起来。总结一下其作用就是: 保持程序的持续运行。 节省CPU资源、提高程序性能。 RunLoop与线程是绑定的,每条线程…
iOS开发 — 类拓展&关联对象
在面试中有时候会被问到类拓展与分类的区别,我相信大多数开发者都能够答出类拓展可以添加属性而分类不可以,但是细究下去,具体的原因是什么呢,可能有部分开发者并不清楚,这次我们就来研究一下。 在之前我们研究过类的加载,知道成员变量ivars是在编译期就确定了的,在ro中可以拿到,所以…
iOS开发 — Block原理分析
在日常的开发中Block也算是我们经常使用的,那么它的底层原理是什么?它的使用又会引起什么问题?解决的方法是什么?笔者将会逐步探索并把结果记录到本篇文章中。 我们经常用到是_NSConcreteStackBlock、_NSConcreteMallocBlock、_NSConcr…
iOS开发 — KVC原理探索
在日常的开发中,KVC是我们经常使用来给对象赋值和取值的,通常会使用- (void)setValue:(nullable id)value forKey:(NSString *)key;赋值,使用- (nullable id)valueForKey:(NSString *)ke…
iOS 开发 — 类的加载
在前几篇文章中我们研究了对象、类和方法,这次我们就来研究一下在开发中非常重要的类究竟是如何加载的。 我们从_objc_init函数开始看起,其实在这之前还包括dyld对动态库的加载、链接等一系列操作,然后才会来到_objc_init函数,这个过程我们日后再另出文章研究。 1. …
iOS开发 — 消息转发流程
如果不实现或者返回nil,就会走到效率较低的forwardInvocation:方法中进行处理。 这个方法是让我们生成一个NSMethodSignature类型的方法签名并返回。 方法签名里包含返回值类型、参数类型等信息。 要使用这个方法必须先重写methodSignature…
iOS开发 — 方法查找流程(慢速)&动态方法解析
在上篇文章中我们说到objc_msgSend函数在底层汇编代码中查找缓存没有命中就会来到bl __class_lookupMethodAndLoadCache3,然后进入lookUpImpOrForward函数,开启方法的慢速查找流程。这次我们就来具体分析一下这个流程。 源码的…
iOS开发 — OC的方法本质
在上图中我们可以清楚的看到,go函数在编译器就确定的函数调用和实现,而OC方法被编译成objc_msgSend函数,因此可以得出结论:OC方法的本质就是通过objc_msgSend等函数来发送消息。 我们可以看到objc_msgSend里有两个参数id和SEL,id是消息接受者…
iOS开发 — 类的缓存分析
上一篇文章中,我们分析了类的结构和属性、成员变量、实例方法、类方法在类中的存储,那么还剩下一个结构没有分析,就是cache_t,这次就让我们来分析一下。 由bucket_t的源码我们可以猜测,cache_t中缓存的是方法实现imp。 本篇文章大致梳理了方法在类中的缓存流程,还有…
下一页
个人成就
文章被点赞
19
文章被阅读
11,742
掘力值
315
关注了
14
关注者
10
收藏集
2
关注标签
9
加入于
2019-12-21