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[3357:303] __func__ = +[Person test] 2014-03-18 15:10:58.374 SEL[3357:303] _cmd = test 2014-03-18 15:10:58.374 SEL[3357:303] 对象方法test1被调用... Program ended with exit code: 0
|