- 博客(20)
- 收藏
- 关注
原创 类的加载原理分析(中)
回顾在上篇类的加载原理分析(上)我们主要是对_read_images函数到底做了哪些事情,进行了一个大致的分析,也在这个过程中找到了接下来探索的思路,也就是在readClass中通过判断类名从而筛选出我们自定义的类是如何加载的,当然大家也可以在那里进行断点调式,打印cls的类的信息,这个在之前的篇章类的原理分析有介绍类的结构,只需要按照结构就可以判断当前cls是否已经完成了ro,rw,rwe的过程,这也是我们之后定位cls加载完成的关键一.realizeClassWithoutSwift引入首先在_r
2021-09-15 18:28:24
163
原创 iOS内存管理学习第一篇-内存五大区
一.内存布局栈 存储局部变量,当局部变量的作用域被执行完毕之后,这个局部变量就会被系统立即回收堆。 程序猿手动申请的字节空间, malloc, calloc,realloc 函数Bss段 存储未被初始化的全局变量,静态变量,一旦初始化就回收,并转存到数据段中数据段存储已被初始化的全局变量,静态变量,直到程序结束才会被回收代码段。 存储代码,直到程序结束才会被回收内核区栈区 空间比较小,不会随意开辟空间局部变量,方法,函数,指针,参数堆区需要开辟空间区存储的在堆区未初始化数据 .bbs
2021-09-07 21:32:12
463
原创 LLVM编译流程和Clang插件开发
一.LLVM概述二.clang插件开发1.LLVM下载由于国内的网络限制,我们需要借助镜像下载LLVM的源码。[https://mirror.tuna.tsinghua.edu.cn/help/llvm/](https://mirror.tuna.tsinghua.edu.cn/help/llvm/)首先我们看一下context的相关说明...
2021-09-06 16:20:58
1302
原创 iOS学习之block不为人知的一面
前言说起block,想必作为一名iOS开发人员,不可能没有接触过,但是用的多不代表你就真正懂了,本篇的目的也就是巩固一下对于block的学习,以及一些坑点和面试题进行分析,看我们到底有多懂block????一.block的分类结合对于block的分类,我们分别把三种block展示出来,代码如下NSGlobalBlock void (^block)(void) = ^{ NSLog(@"YCX"); }; NSLog(@"%@",block);打印结果
2021-08-21 18:21:03
429
原创 iOS多线程面试题汇总与解析
前言其实在我写这边博客之前,也在查阅不好资料,但是发现网上很多人说的内容总结,其实并不正确,导致自己也踩了不少坑,所以才想着重新总结一下,给自己做个参考,也当是复习一下,当然我也可能有不对的地方,希望可以得到改正知识点梳理基本概念简述1.同步函数dispatch_sync 必须等待当前语句执行完毕,才会进行下一条,在当前执行block任务2.异步函数dispatch_async 不用等当前语句执行完毕,就可以执行下一条语句,会开启线程执行block,异步多线程的代名词,主队列例外还
2021-08-21 15:16:57
1053
原创 KVO原理分析
前言KVO相信大家都用得不少,但是不一定所有的细节我们都能清楚,今天我们就一起学习总结一下一.关于KVO的一些细节分享1.context作用填写更安全 稳定2.观察者是否移除3.关于KVO的开关4.一对多观察5.对可变数组的观察二.KVO原理分析1.底层原理过程1:isa -> Ycxperson -> xxx -消失?1.1动态生成 nskvo_person1.2判断nskvo_person 和ycxperson的关系 父子关系1.3 nskvo_perso
2021-07-31 12:03:33
816
原创 类的加载原理分析(上)
void _objc_init(void){ static bool initialized = false; if (initialized) return; initialized = true; // fixme defer initialization until an objc-using image is found? environ_init(); tls_init(); static_init(); runtime_
2021-07-21 15:01:11
353
原创 iOS 底层原理之 类的原理分析(下)
#import <Foundation/Foundation.h>#import "LGPerson.h"#import "LGTeacher.h"void lgKindofDemo(void){ BOOL re1 = [(id)[NSObject class] isKindOfClass:[NSObject class]]; // BOOL re2 = [(id)[NSObject class] isMemberOfClass:[NSObject class
2021-07-07 16:42:07
214
原创 Runtime学习之objc_msgSend分析
1.代码如下LGPerson *person = [LGPerson alloc];[person sayNB];// 子类是不是没有 -> 父类[person sayHello];2.源码如下/**LGPerson *person = ((LGPerson *(*)(id, SEL))(void *)objc_msgSend)((id)objc_getClass("LGPerson"), sel_registerName("alloc")); objc_msgSend)(p
2021-06-29 16:57:25
333
原创 iOS 底层原理之 cache结构分析(上)
一.cache的LLDB分析老规矩,还是先上代码int main(int argc, const char * argv[]) { @autoreleasepool { LGPerson *p = [LGPerson alloc]; Class pClass = [LGPerson class]; [p saySomething]; NSLog(@"%@",pClass); } return
2021-06-25 16:24:06
371
3
原创 iOS 底层原理之 重识alloc流程(下)
1.联合体-位域首先还是介绍一下联合体得内存分配特点联合体中可以定义多个成员,联合体的大小由最大的成员大小决定联合体的成员公用一个内存,一次只能使用一个成员对某一个成员赋值,会覆盖其他成员的值存储效率更高,可读性更强,可以提高代码的可读性,可以使用位运算提高数据的存储效率接下来就到了论证环节和结构体对比了一下,结果显而易见,联合体取最大成员大小,接下来在验证各个成员实际情况...
2021-06-16 18:39:42
208
原创 iOS 底层原理之 重识alloc流程(中)
alloc 底层探究内存分配计算原则前提首先先附一张关于常见各种数据类型的所占用内存大小(字节),32位和64位Untitled1.对象的内存对齐对象内存分配要点对象成员变量8字节对齐对象之间16字节对齐(意味着对象至少16字节)每个对象都会关联一个isa指针(8字节),作为首地址以下是objc源码里面objc-os.h文件中的关于内存对齐规则#ifdef __LP64__# define WORD_SHIFT 3UL# define WORD_MASK 7UL#
2021-06-15 18:36:00
385
2
原创 iOS 底层原理之 重识alloc流程(上)
iOS 底层原理之 重识alloc流程学习前提:想要了解alloc得基本流程,源码必然是少不了得,我选的是objc-818.2https://opensource.apple.com/tarballs/ 苹果源码汇总,拿走不谢流程图首先先展示一下基本的流程图,当然其实有一些情况没有列举出来,欢迎给予意见开干!导入源码后,首先创建一个基本对象YCXPerson,再alloc得时候断点,一步步查看里面的执行步骤说到这里就不得不介绍一下比较好用的一种断点方式了先用符号断点alloc 然后
2021-06-07 16:50:54
256
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人