一 SEL
1. 方法的存储位置
每个类的方法地址列表都存储在类对象中。
每个方法都有一个与之对应的SEL类型的对象。
根据一个SEL对象就可以找到方法的地址,进而调用方法。
Person.h
1 #import <Foundation/Foundation.h> 2 3 @interface Person : NSObject 4 5 + (void) test1; 6 7 - (void) test2; 8 9 - (void )test3:(NSString *) abc; 10 11 @end
Person.m
1 #import "Person.h" 2 3 @implementation Person 4 5 + (void)test1{ 6 NSLog(@"调用方法test1 ---\n"); 7 } 8 9 - (void)test2{ 10 NSLog(@"调用方法test2 ---\n"); 11 } 12 13 - (void)test3:(NSString *)param1{ 14 NSLog(@"调用方法test3 ---%@", param1); 15 } 16 17 @end
main.m
1 [p test2]; 2 3 [p performSelector:@selector(test2)];
第1行 第一种方式:直接通过p对象调用test2方法。
第2行 第二种方式:间接调用 test2方法。
1)把test2包装成SEL类型的数据。
2)根据SEL数据找到对应的方法地址。
3)根据方法地址调用对应的方法。
1 [p test3:@"123"]; 2 3 [p performSelector:@selector(test3:) withObject:@"123"]; 4
第1行:p 类直接调用带参数的方法test3.
第3行: p类间接调用带参数的方法 test3,注意间接调用带参数的方法时,使用 @selector(方法:)的形式调用。
1 NSString *name = @"test2"; 2 SEL s2 = NSSelectorFromString(name); 3 NSLog(@"%p" , s); 4 NSLog(@"%p" , s2);
时间: 2024-10-17 14:00:48