IOS基础之 (十五)知识点

时间:2022-08-26 02:59:44

一 SEL

1. 方法的存储位置

每个类的方法地址列表都存储在类对象中。

每个方法都有一个与之对应的SEL类型的对象。

根据一个SEL对象就可以找到方法的地址,进而调用方法。

Person.h

 #import <Foundation/Foundation.h>

 @interface Person : NSObject

 + (void) test1;

 - (void) test2;

 - (void )test3:(NSString *) abc;

 @end

Person.m

 #import "Person.h"

 @implementation Person

 + (void)test1{
NSLog(@"调用方法test1 ---\n");
} - (void)test2{
NSLog(@"调用方法test2 ---\n");
} - (void)test3:(NSString *)param1{
NSLog(@"调用方法test3 ---%@", param1);
} @end

main.m

 [p test2];

 [p performSelector:@selector(test2)];

第1行 第一种方式:直接通过p对象调用test2方法。

第2行 第二种方式:间接调用 test2方法。

1)把test2包装成SEL类型的数据。

2)根据SEL数据找到对应的方法地址。

3)根据方法地址调用对应的方法。

 [p test3:@""];

 [p performSelector:@selector(test3:) withObject:@""];

第1行:p 类直接调用带参数的方法test3.

第3行: p类间接调用带参数的方法 test3,注意间接调用带参数的方法时,使用 @selector(方法:)的形式调用。

 NSString *name = @"test2";
SEL s2 = NSSelectorFromString(name);
NSLog(@"%p" , s);
NSLog(@"%p" , s2);