方法的调用过程

方法的调用实际是发送SEL消息

SEL是对方法的一种包装,所以说发消息,就是发送SEL数据。

将方法包装成一个SEL类型的数据,去找对应的方法地址,找到方法地址就可以调用方法。


调用方法的过程:

a. 将test包装成SEL

b. 根据SEL数据找到对应方法的地址

c. 根据方法地址调用对应的方法

这个操作是有缓存的,能够提高查找效率


通过SEL掉用方法

如:

[ptest2];

调用方法,也可以通过下面的方法调用:

[pperformSelector:@selector(test2)];

再如:

[ptest2:@”123”];

调用带参数的方法,也可以通过下面的方法调用:

[pperformSelector:@selector(test3:)withObject:@”123”];


SEL是方法的类型

实际上SEL是struct objc_selector*类型,如:

SELs=@selector(test);SELs2=NSSelectorFromString(@”test”);


每个方法中都有一个_cmd代表当前方法,如下面的方法将打印方法名:

-(void)test2{NSString*str=NSStringFromSelector(_cmd);NSLog(“name:%@”,str);//[selfperformSelector:_cmd];//会引发无限递归死循环}