OC中方法的调用底层实现很多开发者都知道是利用消息转发机制来进行的,那么这个底层的代码究竟是怎样实现的呢,今天就为大家解密一番。
1.新建一个项目,创建一个Person类,然后在.h中添加一个方法,并在.m文件中实现。
2.在ViewController中引入Person类,调用方法并打印。
这对大家来说没有任何问题。
3.那接下来, 我们就用消息转发机制来实现这个方法,具体是利用 objc_msgSend 这个方法来实现,但是我们首先要在buildSetting中设置一下,
将这个Enable Strict Checking of objc_msgSend Calls 设置为NO,关闭严格检测,不然调用objc_msgSend 这个方法会报错,然后在ViewController中导入#import<objc/message.h> 头文件。
4.使用消息转发机制代替OC的方法。
这个时候我们就把之前OC方法的代码转化为底层内部实现的代码,但是这个是底层了吗,还不是,还可以进一步转化。
5.这个时候需要问下大家,我们获得一个类和一个SEL方法有什么方式? 方式有很多,但是这里我们只能用字符串才能获取,那方法就很明显了,需要用到以下两个方法。
,那么有了这两个方法,我们上面 Person *p = objc_msgSend(Person.class, @selector(alloc)); 中的两个参数,Person.class和alloc方法就可以获取了,同样的,在OC底层代码中,这两个方法也可以用其他代码取代,那就是 objc_getClass和 sel_registerName,完整代码如下图:
6.现在大家是不是对iOS方法调用的底层代码了解了呢,记得关注赞赏我哟,带你解密更多iOS底层知识。