简单记录一下在 Xcode 中是如何查看函数调用的,先来一段简单的代码。
CZPerson *p = [[CZPerson alloc] init];
[p isKindOfClass:[NSObject class]];
[p eat];
复制代码
然后在需要的地方打一个断点,这里我们要看下 isKindOfClass底层,调用的什么函数,在 [objc isKindOfClass:[NSObject class]];的下一行打断点,除此之外还需要需要设置 Xcode 的 Debug的选项

Xcode -> Debug -> Debug Workflow -> Always show Disassembly
然后运行一下工程,运行到断点处,就会看到下面的函数调用

稍微解释一下,第一个函数 objc_alloc_init对应 [[CZPerson alloc] init];,接着会调用 objc_opt_class,对应的是 [NSObject class],然后就是我们的主角 objc_opt_isKindOfClass ,对应isKindOfClass。从这里可以得出 isKindOfClass 底层调用的是 objc_opt_isKindOfClass 函数。
另外来看一下 [p eat]; 的调用过程

这里的函数调用过程走的是 Objective-C 中的消息发送 objc_msgSend
和之前的几个进行对比就会发现,关于 Objective-C 的对象创建, 获取 class 和调用 isKindOfClass 都是直接使用 runtime 中的函数
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
























![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)