iOS 中Selector的原理窥探

一直在代码中使用@Selector(method:),但对其原理知之甚少,所以决定去了解一下其原理。

当一个receiver接收消息时,会触发 objc_msgSend(receiver, SEL op, ...);

首先去runtime底层代码去查看,这些参数的来源

每一个receiver都是objc_object结构体的实例

通过isa指针找到当前对象的class,并在class的method list中寻找发送的消息


iOS 中Selector的原理窥探_第1张图片

接着看objc_method_list,根据官方文档的说法,这是一个包含了多个objc_method的数组,objc_method这个结构体中包含了2个重要信息---SEL和IMP, receiver接收消息时传的参数是SEL类型,SEL主要用来标注方法的名称,IMP则是方法指针,因为每个方法都有自己的地址,这种方式直接找到方法的地址,效率最高。

这样就完成了消息的发送过程,欢迎各位指正

iOS 中Selector的原理窥探_第2张图片

你可能感兴趣的:(iOS 中Selector的原理窥探)