SEL全程selector选择器,SEL为系统经过typdef定义,声明时不用加*,SEL是一个类,OC的方法都属于这个类型,方法代码存放在内存中的代码段中。

OC方法存储在代码的方式:

1.先创建一个SEL对象。

2.把方法信息存储给SEL这个对象。

3.把这个生成的SEL对象作为类对象属性,存储在类对象所在的代码段中。

4.多个SEL方法的对象,以类似数组的方式存放在类对象代码段中。

OC方法调用的原理:

1.获取该方法的SEL对象,SEL *slelector = @selector(方法名);

2.将SEL发送消息给即将调用的对象。

3.对象根据isa指针去代码段寻找SEL。

4.如果isa指针未找到该SEL,怎会根据代码段的父类isa指针去寻找父类的方法,依次寻找,直到NSObject类。

5.如果有找到,执行该方法,如果未找到会报错。

注意:编译器只根据指针类型去做以上判断,运行时会检查对象本身是否有这个方法,如果指针类型和对象类型不一致且对象缺失该方法,则无法执行该方法代码指令。

手动实现调用方法:

第一步:获取SEL对象:SEL fun = @selector(方法名:);

第二步:[对象 performSelector:方法名];

避免发生对象误调用缺失的方法:

BOOL isFun = [对象名称 respondsToSelector:fun];

返回YES则说明该对象有这个方法,返回NO说明没有这个方法。

文章来源

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。