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
)
时间: 2024-08-03 06:40:08

OC语言学习 (四) SEL对象,用于日志输出的宏的相关文章

iOS学习笔记---oc语言第四天

字符串 数组 一.使用苹果帮助文档 学会使?用苹果帮助?文档是开发者的?一项技能 Inherits from 继承?自 Conforms to 遵循什么协议 Framework 属于哪个框架 Availability 什么时候可?用的 Declared in 声明在什么头文件?里 Related documents 相关文档 Sample code ?示例代码 快速打开帮助文档 在代码中,将?鼠标停留在 类名或者?法名上,option+?鼠标左键,点击 Reference的超链接进?入帮助?文档

人生三分之一埋在土里的时候,选择了学习OC语言 1 类和对象

人生三分之一埋在土里的时候,选择了学习OC语言  1 类和对象 今天开始整理我所理解的东西,希望能够帮助一些像我一样想要学习一门计算机语言的朋友们, 可能在很多的地方理解的也不够深入,有不对的地方还希望关注的朋友能够谅解,也多多提您的宝贵意见! 学习前需要具备的条件: 首先你要有C语言的一些基础,如果你没有,那可以先去自学一下C语言, 我是通过以下网站进行学习的,也希望对你能够有帮助! http://c.biancheng.net/cpp/u/jiaocheng/ 其次,你要有一台mac电脑,

黑马程序员——oc语言学习心得—— 属性声明和赋值

黑马程序员——oc语言学习心得—— 属性声明和赋值 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,在oc中所有类继承与终极父类Object2,声明字符变量采用N是string  *_xxx 实例变量一般以下划线开头3,在oc中方法以+ -号区分 -号开头是实例方法或对象方法  +号开头是类方法  前置用对象调用 后者用类名调用4,在xcode4以后声明@property 不用在写@snysize  自动生成get.set方法5,属性

黑马程序员—oc语言学习心得—block

黑马程序员—oc语言学习心得—block -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,程序一般用typedef定义一个block类型 然后调用 typedef void(^xxx)(); 可使用助记符 inlineblock 2,Block内部可以访问外部变量:默认情况下,Block内部不能修改外部的局部变量 给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改. 3,block的作用: 利用block封

黑马程序员——oc语言学习心得----NSFileManager

黑马程序员——oc语言学习心得----NSFileManager -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 自己总结了下NSFileManager的简单几个用法 : // 首先要创建文件管理器 NSFileManager *fm=[NSFileManager defaultManager]; 1,判断文件是否存在 fileExistsAtPath: 2,判断文件是否是目录 fileExistsAtPath: 3, 判断文件是否可读

oc语言学习之基础知识点介绍(二):类和对象的进一步介绍

一.类.对象在内存中的存储 /* 内存分区: 栈:局部变量 堆:程序员自己写代码申请开辟的 程序员自己维护,编译器现在帮我们自动优化了,它在合适的给我们加上了释放空间的语句,所以我们现在写的对象不会造成内存泄露 全局区:所有的全局变量和静态变量 常量区:所有的常量 代码区:程序编译后的指令集 类是模板,肯定需要存在内存里面,因为实例化对象的时候需要根据这个模板来创建,那么存在内存里面,存在哪呢?? 类模板存在:全局区! 存的是:类的描述,还有所有的方法实现 每个对象都会有一个系统给我们的isa指

23-黑马程序员------OC 语言学习笔记---内存管理

黑马程序员------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 对于面向对象的变成语言,程序需要不断地创建对象.初始,创建的所有程序通常都有指针指向它,程序可能需要访问这些对象的实例变量或调用这些对象的方法,随着程序的不断执行,程序再次创建了一些新的对象,而那些老的对象已经不会再被调用,也不

有关Oc语言学习的一些感受及对面向过程和面向对象的理解

不得不说,接触编程过后,我的生活从来没有这么规律过,每天按时吃早中晚的饭,每天早九晚九的学习,我就在想我的大学生活怎么就没有这么认真过呢?算了还是不提大学了,惭愧的狠.       说正事吧,我学的ios软件开发,在这里之前的一个星期,把我曾经仅学了其三分之一的C语言基本完整的学了一遍,七天学习加复习相当于我曾经的一学期!这意味着什么,还是意会吧.然而C语言只是学习ios开发的桥梁,通过C语言过度到Object-c语言简称Oc,Oc才是进入ios开发大门的钥匙和基石.之前老师一再强调,基础一定要

iOS开发入门 ? OC语言&#183;笔记四

内存管理 : 主要对堆内存进行管理,所谓的管理是指内存的分配(创建)和释放(回收) 内存管理:管理对象的分配和释放,回收那些不需要再使用的对象(内存) 下列行为都会增加一个app的内存占用 创建一个OC对象 定义一个变量 调用一个函数或者方法 如果app占用内存过大,系统可能会强制关闭app,造成闪退现象,影响用户体验 1.1 两种管理方式 MRC(Manual Reference Counting):手动引用计数(手动管理内存) 所有对象的内存都需要我们手动管理, 需要程序员自己编写retai