iOS爱上底层-objc_msgSend分析

367 阅读1分钟

简介

我们都知道OC的底层是通过runtime来进行消息发送的,而runtime是由汇编、C、C++提供给OC运行时的功能的一套api。

方法的本质是什么?

首先我们创建一个Person类,并且在Person里面定义一个sayHello方法,然后在main函数初始化Psreson并调用sayHello方法。最后打开终端,并进入到当前main.m的上一级文件夹,用clang将main.m编译成main.cpp(clang -rewrite-objc main.m)。打开main.cpp,并且看到最下面代码:

我们会发现在OC里面调用的方法,在底层就是objc_msgSend。

objc_msgSend的实践

  • 首先我们在Build Settings里面关闭一下严格核查,否则会出现编译参数的问题

  • 模拟4种消息发送

总结

方法的本质就是objc_msgSend。