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

 [[Person new] 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
)



  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值