Sian 发表于 2014-3-18 15:11:26

SEL在方法调用中的使用

1、取函数名的两种方式:
   __func__直接代表当前函数名
   通过方法中的SEL类型数据"_cmd"内容读取,将函数名取出;

2、对象方法调用实际是在类中将所有方法进行SEL索引后找出相对应的方法执行,所以先将方法名进行SEL类型转换,再传给对象,一样可能实现调用对象方法的目的
   SEL s = @selector(方法名)
   [对象名 performSelector:s];

参考代码:

Person.h
//
//Person.h
//SEL
//
//Created by yusian on 14-3-18.
//Copyright (c) 2014年 小龙虾论坛. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject

+ (void)test;

- (void)test1;

@end

Person.m
//
//Person.m
//SEL
//
//Created by yusian on 14-3-18.
//Copyright (c) 2014年 小龙虾论坛. All rights reserved.
//

#import "Person.h"

@implementation Person

+ (void)test
{
    // 通过__func__将当前函数名输出
    NSLog(@"__func__ = %s", __func__);
   
    // 每个方法中都有一个隐含的SEL类型数据"_cmd",该数据用来表示当前方法的方法名,通过
    NSString * str = NSStringFromSelector(_cmd);
   
    // 输出字符串中的内容,即SEL类型_cmd中储存的信息
    NSLog(@"_cmd = %@", str);
}

- (void)test1
{
    NSLog(@"对象方法test1被调用...");
}

@end

main.m
//
//Person.m
//SEL
//
//Created by yusian on 14-3-18.
//Copyright (c) 2014年 小龙虾论坛. All rights reserved.
//

#import "Person.h"

@implementation Person

+ (void)test
{
    // 通过__func__将当前函数名输出
    NSLog(@"__func__ = %s", __func__);
   
    // 每个方法中都有一个隐含的SEL类型数据"_cmd",该数据用来表示当前方法的方法名,通过
    NSString * str = NSStringFromSelector(_cmd);
   
    // 输出字符串中的内容,即SEL类型_cmd中储存的信息
    NSLog(@"_cmd = %@", str);
}

- (void)test1
{
    NSLog(@"对象方法test1被调用...");
}

@end

输出结果:
2014-03-18 15:10:58.372 SEL __func__ = +2014-03-18 15:10:58.374 SEL _cmd = test2014-03-18 15:10:58.374 SEL 对象方法test1被调用...Program ended with exit code: 0
页: [1]
查看完整版本: SEL在方法调用中的使用