当前位置: 首页 > 科技观察

iOS开发中SEL的简单总结

时间:2023-03-14 00:02:38 科技观察

@interfacePerson:NSObject+(void)test1;-(void)test2;@end//根据.h文件中定义的Person类和方法执行完这行代码后,以下Person在内存中*person=[[Personalloc]init];SEL是一种封装方法。封装后的SEL类型数据对应对应的方法地址。如果找到方法地址,就可以调用方法1,方法的存放位置在内存中。每个类的方法都存储在类对象中。每个方法都有对应的SEL数据类型,可以根据一个SEL数据找到对应的方法地址,然后调用方法SEL类型的定义:typedefstructobjc_selector*SEL2.SELobjectcreationSELs1=@selector(test1);  //封装test1方法SEL对象 SELs2=NSSelectorFromString(@"test1");  //将字符串方法转换为SEL对象3.SEL对象的其他用法//将SEL对象转换为NSString对象  NSString*str=NSStringFromSelector(@selector(test)); Person*p=[Personnew];//调用对象p[pperformSelector:@selector(test)]的test方法;/********************************Person.h文件*************************************/#import@interfacePerson:NSObject-(void)test1;-(void)test2:(NSString*)str;@end/*********************************Person.m文件*************************************/#import"Person.h"@implementationPerson-(void)test1{NSLog(@"对象方法无参数");}-(void)test2:(NSString*)str{NSLog(@"带参数的方法%@",str);}@end/**********************************main.m文件**************************************/#import"Person.h"#import/*调用方法有两种方式:1.直接通过方法名调用2.通过SEL间接调用数据*/intmain(intargc,constchar*argv[]){Person*person=[[Personalloc]init];//1.执行这行代码时,test2会被打包成SEL类型的data//2。然后根据SEL数据找到对应的方法地址(比较耗性能但是系统会有缓存)//3.根据方法地址调用对应的方法[persontest1];//直接将方法封装成SEL数据类型调用withObject:传入参数[personperformSelector:@selector(test1)];[personperformSelector:@selector(test2:)withObject:@"传入参数"];return0;}