首页 > 代码库 > OC语言学习 (四) SEL对象,用于日志输出的宏
OC语言学习 (四) SEL对象,用于日志输出的宏
SEL 对象即一个selector对象,保存一个方法的地址。
Person.h
#ifndef oc_Person_h #define oc_Person_h @interface Person : NSObject { int age; @protected float height; } @property int age; //编译器自动解释成 int age的get/set方法 - (void) say; - (void) testSEL; @end #endif
Person.m
#import <Foundation/Foundation.h> #import "Person.h" @implementation Person @synthesize age; //编译器自动解释成 age的get、set方法实现 - (void) say { NSLog(@"调用了say方法"); } - (void) testSEL { SEL say1 = @selector(say); //创建say方法的SEL对象 SEL say2 = NSSelectorFromString(@"say"); //从方法名字符串 创建SEL对象 [self performSelector:say1]; //执行 ss指向的方法 [self performSelector:say2]; //-[NSObject performSelector] /* 以下可以作为Log输出 */ NSLog(@"------------------------------------------------"); SEL s = _cmd; // 每一个方法内都有一个_cmd,表示方法自身 NSLog(@"当前方法(NSStringFromSelector):%@", NSStringFromSelector(s)); //NSStringFromSelector 返回方法名 NSLog(@"所在文件完整路径(__FILE__):%s", __FILE__); NSLog(@"所在文件名:%@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent]); NSLog(@"当前行号(__LINE__):%d", __LINE__); NSLog(@"当前方法签名(__func__):%s", __func__); NSLog(@"当前方法签名(__PRETTY_FUNCTION__):%s", __PRETTY_FUNCTION__);//在c++代码中,会包含类型的详细信息 NSString* clz = NSStringFromClass([Person class]); //返回一个Class对象的类名 NSLog(@"当前类名(NSStringFromClass):%@", clz); NSLog(@"%@", [NSThread callStackSymbols]);// 返回当前调用栈信息 } @end
main.m
[[Personnew] testSEL];
输出:
2014-12-10 13:52:36.439 oc[1692:122703] 调用了say方法 2014-12-10 13:52:36.439 oc[1692:122703] 调用了say方法 2014-12-10 13:52:36.439 oc[1692:122703] ------------------------------------------------ 2014-12-10 13:52:36.439 oc[1692:122703] 当前方法(NSStringFromSelector):testSEL 2014-12-10 13:52:36.439 oc[1692:122703] 所在文件完整路径(__FILE__):/Users/stone/Documents/workspace_xcode/oc/oc/Person.m 2014-12-10 13:52:36.440 oc[1692:122703] 所在文件名:Person.m 2014-12-10 13:52:36.440 oc[1692:122703] 当前行号(__LINE__):35 2014-12-10 13:52:36.440 oc[1692:122703] 当前方法签名(__func__):-[Person testSEL] 2014-12-10 13:52:36.440 oc[1692:122703] 当前方法签名(__PRETTY_FUNCTION__):-[Person testSEL] 2014-12-10 13:52:36.440 oc[1692:122703] 当前类名(NSStringFromClass):Person 2014-12-10 13:52:36.441 oc[1692:122703] ( 0 oc 0x0000000100001556 -[Person testSEL] + 518 1 oc 0x0000000100001fed main + 2077 2 libdyld.dylib 0x00007fff8ad4f5c9 start + 1 )
OC语言学习 (四) SEL对象,用于日志输出的宏
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。