SEL
SEL是一种数据类型,表示的是方法的存储位置。
假设有一个Person类,实例化该类后就有了person对象,那么每个对象都会有一个isa指针指向该类的代码存储区。在代码存储区中,会有SEL包装过的一些方法的调用地址,通过SEL指向的地址来调用该具体的方法。
用下代码来解释,也许会更清晰点:
SEL func = @selector(stringByAppendingString:);
NSString* abc = @"abc";
abc = [abc performSelector:func withObject:@"hhh"];
NSLog(@"%@",abc);
如代码中所示,首先用SEL声明了一个方法的名称,
接着创建了一个NSString类的对象abc,那么这个对象创建的时候,相对应的会有一个isa指针指向该类的一些方法名称,比如
SEL s1 = stringByAppendingString:
如此这般
每个对象都可以通过performSelector: withObject:方法去查方法表里是否有这个方法,有的话,就会指向方法地址去调用,没有的话,就会报错,后面的withObject:指的是调用该方法所传入的参数。
运行结果:
2021-12-02 18:24:43.448285+0800 text2021[56483:6681024] abchhh