iOS底层原理:OC对象底层探索之开辟内存(二)
内存优化看完了结构体的内存对齐,我们再来看一下OC对象的内存对齐又是怎样的呢?JQPerson中自定义的变量和JQStruct2的成员的类型和顺序是一模模一样样的,他们打印出来的内存大小都是24字节,也是一模模一样样的,乍一看,没毛病呀。大哥,你忘记了对象本身自带了一个变量isa指针吗?它也占了8个字节呢。所以这样一看,JQPerson中自定义的变量只占了16个字节,这就很奇怪了啊,变量的类型和....
iOS底层原理:OC对象底层探索之alloc初探(二)
第2步:llvm-project 底层分析由于 llvm-project 项目比较大,这里我们用 VSCode 打开首先,我们全局搜索一下alloc或者OMF_alloc:,来到tryGenerateSpecializedMessageSend方法,这个方法在 CGObjC.cpp 文件中21-1.png我们主要看3号位置的方法解释,这里我翻译了一下,大家可以自行去看,这是苹果对性能的一个优化。....
iOS底层原理:苹果开源 objc4-818 源码项目的编译和调试(三)
报错29:'os/variant_private.h' file not found同样是文件缺失,variant_private.h这个文件在Libc-1439.141.1/os/目录下解决方式:将variant_private.h从Libc-1439.141.1/os/目录下copy到JQDependencies/os/目录下报错30:Use of undeclared identifier....
iOS底层原理:苹果开源 objc4-818 源码项目的编译和调试(二)
报错9:'os/tsd.h' file not found同样是找到文件位置,tsd.h文件在xnu-7195.141.2/libsyscall/os目录下解决方式:将tsd.h从xnu-7195.141.2/libsyscall/os目录下copy到JQDependencies/os/目录下报错10:'System/pthread_machdep.h' file not found同样是找到文....
iOS底层原理:KVC分析(一)
KVC全称Key-Value Coding,俗称键值编码。它是一种通过字符串描述符而不是通过调用访问方法或者直接使用实例变量的非直接的访问对象属性的机制。在iOS中,NSObject、NSArray、NSDictionary等类使用这种机制并采用分类的形式为自身拓展了KVC的能力。常用的Api如下:- (void)setValue:(nullable id)value forKey:(NSStr....
iOS底层原理:Method Swizzling原理和注意事项(二)
方法交换的坑点和分析坑点一:交换父类的方法我们还在刚才的Demo中来演示,现在有一个JQStudent类了,再创建一个JQPerson类,让JQStudent继承JQPerson,在JQPerson类添加一个实例方法personInstanceMethod,在JQStudent类的load方法中将jq_studentInstanceMethod方法和父类中的personInstanceMetho....
iOS底层原理:OC对象底层探索之开辟内存(一)
0-0.png在上篇文章iOS底层原理(二):OC对象底层探索之alloc初探 中,我们体验了 objc 底层源码的调试流程,也介绍了一部分 [JQPerson alloc] 在底层的工作流程,最终在callAlloc中走到了_objc_rootAllocWithZone方法。那么今天我们就来继续探索_objc_rootAllocWithZone方法之后的流程吧!继续alloc底层探索首先,我们....
iOS底层原理:OC对象底层探索之alloc初探(一)
iOS开发的小伙伴们对 [XXX alloc] init] 都不陌生,可以说 alloc 和 init 贯穿我们整个的开发过程中。那么在OC对象的底层,到底做了哪些操作呢?今天我们就来探索一下 alloc 底层的工作流程。一、抛砖引玉我们先来看一下下面这张图中的测试代码和打印结果:从上面的打印结果来看,p、p1、p2对象的内存地址是一样的,但是p、p1、p2对象的指针地址(&p、&...
iOS底层原理:苹果开源 objc4-818 源码项目的编译和调试(一)
开篇作为一名iOS程序员,探索OC底层原理永不止息,同时也是永远的痛,最开始只能靠猜测!后面慢慢找到了苹果官方开源的源码来辅助看一下,但是尽管这样,还是显得不太直观!如果objc源码能够像我们自己创建的项目一样直接编译调试,像我们自己的代码一样能够直接 LLDB 调试,流程跟踪,那简直不要太爽。废话不多说,开炮~ 哦,不是,是开干~!一、准备工作苹果官方开源源码地址:https://openso....
iOS原理分析之从源码看load与initialize方法(二)
四、initialize方法分析 我们可以采用和分析load方法时一样的策略来对initialize方法的执行情况,进行测试,首先将测试工程中所有类中添加initialize方法的实现。此时如果直接运行工程,你会发现控制台没有任何输出,这是由于只有第一次调用类的方法时,才会执行initialize方法,在main函数中编写如下测试代码:int main(int argc....
本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。
mPaaS 移动开发平台
mPaaS 源于蚂蚁集团金融科技,为 App 开发、测试、运营及运维提供云到端的一站式解决方案,致力于提供高效、灵活、稳定的移动研发、管理平台。 官网地址:https://www.aliyun.com/product/mobilepaas/mpaas
+关注