SEL 类型

1.SEL类型的第一个作用, 配合对象/类来检查对象/类中有没有实现某一个方法

    SEL sel = @selector(setAge:);
    Person *p = [Person new];
    // 判断p对象中有没有实现-号开头的setAge:方法
    // 如果P对象实现了setAge:方法那么就会返回YES
    // 如果P对象没有实现setAge:方法那么就会返回NO
    BOOL flag = [p respondsToSelector:sel];
    NSLog(@"flag = %i", flag);

    // respondsToSelector注意点: 如果是通过一个对象来调用该方法那么会判断该对象有没有实现-号开头的方法
    // 如果是通过类来调用该方法, 那么会判断该类有没有实现+号开头的方法
    SEL sel1 = @selector(test);
    flag = [p respondsToSelector:sel1];
    NSLog(@"flag = %i", flag);

    flag = [Person respondsToSelector:sel1];
    NSLog(@"flag = %i", flag);

2.SEL类型的第二个作用, 配合对象/类来调用某一个SEL方法

SEL sel = @selector(demo);
    Person *p = [Person new];
    // 调用p对象中sel类型对应的方法
    [p performSelector:sel];

    SEL sel1 = @selector(signalWithNumber:);
    // withObject: 需要传递的参数
    // 注意: 如果通过performSelector调用有参数的方法, 那么参数必须是对象类型,
    // 也就是说方法的形参必须接受的是一个对象, 因为withObject只能传递一个对象
    [p performSelector:sel1 withObject:@"13838383438"];

    SEL sel2 = @selector(setAge:);
    [p performSelector:sel2 withObject:@(5)];
    NSLog(@"age = %i", p.age);

    // 注意:performSelector最多只能传递2个参数
    SEL sel3 = @selector(sendMessageWithNumber:andContent:);
    [p performSelector:sel3 withObject:@"138383438" withObject:@"abcdefg"];

3.配合对象将SEL类型作为方法的形参

// 在Person方法中实现  

- (void)makeObject:(id)obj andSel:(SEL)sel
{
    [obj performSelector:sel];
}

// 将sel作为形参传递
    Car *c = [Car new];
    SEL sel = @selector(run);

    Person *p = [Person new];
    [p makeObject:c andSel:sel];
    return 0;
时间: 2024-11-06 09:26:51

SEL 类型的相关文章

Description方法&&SEL类型

description方法和sel数据类型 一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象方法) 使用NSLog和@%输出某个对象时,会调用对象的description方法,并拿到返回值进行输出. +description(类方法) 使用NSLog和@%输出某个对象时,会调用类对象的description方法,并拿到返回值进行输出,把整个对象一次性打印出来,打印对象使用%@. 使用@%打

SEL 类型 和 类的反射

SEL 类型 SEL 类型是用来描述一个方法的,可以理解为SEL是方法的指针.该SEL类型类似于Java中的Method类.OC中可以通过两种方法来获得SEL类型. @selector(methodName) : NSSelectorFromString(@"methodName") ; 反射的方法 -(BOOL) isKindOfClass : (class) clazz isKindOfClass 方法用来判断当前对象是否是一个类或者其子类的实例 [cat isKindOfClas

OC语言--SEL类型小记

SEL类型 1 @selector();函数 示例代码: SEL sel = @selector(bark);//把oc的方法名转化为选择器类型SEL //检测判断sel选择器代表的方法,在xiaohong对象所属类中有没有实现 if ([xiaohong respondsToSelector:sel]) { //调用的效果等价于 [xiaohong bark]; [xiaohong performSelector:sel];//执行sel所代表的方法 }else{ NSLog(@"函数没有实现

Class 类型、Selector 选择器、SEL 类型、函数指针

一.Class 类型 机制:一个类在正确编译后,在这个被正确编译好的类里面,存在一个isa指针,用于存储类的方法及变量信息,这个isa指针是id类型.可以通过一个普通的字符串可能获取到这个Class类型对象,也可以通过此类的对象获取到此类的Class类型对象,获取到Class类型对象后,可以按类实例化后的对象一样使用它.在程序runtime可以通过类的Class类型对象获取到类实例化后的对象,也可以动态的获取在编译阶段无法确定的对象. 因为,在类里面存储了类的所有信息,所以,可以通过类的名称或类

Objective-C description方法 SEL类型

description方法 #import "Person.h" @implementation Person - (void) setAge : (int) age { _age = age; } /** 决定了实例对象的输出结果 **/ - (NSString *) description { return [NSString stringWithFormat : @"age=%i", _age]; } /** 决定了类对象的输出结果 **/ + (NSStri

Objective-C 布尔类型 和 class、SEL类型

发现很多初学者无法区分bool和BOOL及class类型,今天闲来无事,写个博文做个区分 1. bool是C语言的布尔类型,有true和false,BOOL是Objective C 语言的布尔类型,有YES和NO,因为OC可以跟C混编,所以bool和BOOL可以同时出现在代码中 2. BOOL深入解析: BOOL实际上是带符号的字符类型,存储空间为8位,所以如果把一个32位的整数赋给BOOL,只会取末8位. BOOL类型中YES定义为1,NO定义为0,在内存存数据时,并不会存YES或NO,所以如

Description方法&&SEL数据类型

description方法和sel数据类型 一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象方法) 使用NSLog和@%输出某个对象时,会调用对象的description方法,并拿到返回值进行输出. +description(类方法) 使用NSLog和@%输出某个对象时,会调用类对象的description方法,并拿到返回值进行输出,把整个对象一次性打印出来,打印对象使用%@. 使用@%打

OC语言description方法和sel

一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象方法) 使用NSLog和@%输出某个对象时,会调用对象的description方法,并拿到返回值进行输出. +description(类方法) 使用NSLog和@%输出某个对象时,会调用类对象的description方法,并拿到返回值进行输出,把整个对象一次性打印出来,打印对象使用%@. 使用@%打印对象如(“@%”,P)默认打印输出为<类名

自定义构造、description方法、SEL

[Objective-C]07-自定义构造方法和description方法 // 构造方法:用来初始化对象的方法,是个对象方法,”-"开头// 重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值/* 重写构造方法的注意点1.先调用父类的构造方法([super init])2.再进行子类内部成员变量的初始化 */ // 重写-init方法//- (id)init//{//    // 1.一定要调用回super的init方法:初始化父类中声明的一些成员变量和其他属性//    se