SEL就是对方法的一种包装。包装的SEL类型数据它对应相应的方法地址,找到方法地址就可以调用方法
1.方法的存储位置
在内存中每个类的方法都存储在类对象中
每个方法都有一个与之对应的SEL类型的数据
根据一个SEL数据就可以找到对应的方法地址,进而调用方法
SEL类型的定义: typedef struct objc_selector *SEL
2.SEL对象的创建
- SEL s1 = @selector(test1); // 将test1方法包装成SEL对象
- SEL s2 = NSSelectorFromString(@"test1"); // 将一个字符串方法转换成为SEL对象
3.SEL对象的其他用法
- // 将SEL对象转换为NSString对象
- NSString *str = NSStringFromSelector(@selector(test));
- Person *p = [Person new];
- // 调用对象p的test方法
- [p performSelector:@selector(test)];
1 /******************************* Person.h文件 **********************************/
2
3 #import <Foundation/Foundation.h>
4
5 @interface Person : NSObject
6
7 - (void)test1;
8
9 - (void)test2:(NSString *)str;
10
11 @end
12
13 /******************************* Person.m文件 **********************************/
14
15 #import "Person.h"
16
17 @implementation Person
18
19 - (void)test1
20 {
21 NSLog(@"无参数的对象方法");
22 }
23
24 - (void)test2:(NSString *)str
25 {
26 NSLog(@"带有参数的方法%@",str);
27 }
28 @end
29
30 /******************************* main.m文件 **********************************/
31
32 #import "Person.h"
33 #import <Foundation/Foundation.h>
34
35 /*
36 调用方法有两种方式:
37 1.直接通过方法名来调用
38 2.间接