OC核心语法(4)description方法和SEL

一、description方法介绍

    1.使用%@打印对象如(“%@”,P)默认打印输出为<类名:内存地址>,

特例:字符串也是对象,但字符串在使用@%打印时情况特殊

    2. description的对象方法与类方法

-description

1>会调用对象p的-description方法

2>拿到-description方法的返回值(NSString *) 显示到屏幕上

3>此方法默认返回的是"类名:内存地址"  (可通过重写此方法,修改默认值) 

+description  

1>默认返回的是“类名”

2>使用类调用

    3.代码示例





二、重写description方法
    1.重写description实现输出Person类成员变量

修改后的Person实现


主函数及输出结果


    2.方法区别

+description方法决定了类对象的输出结果,即类本身

-description方法决定了实例对象的输出结果,即Person创建的对象


三、NSLog输出补充
    1.官方文档列出的输出语句常用的宏定义表达式


    2.代码示例


        注意:__双下划线,上图打印结果中没有打印出文件名因为NSLog下__FILE__不支持含中文的路径打印


四、SEL
    1.简介

SEL:全称Selector 表示方法的存储位置

SEL是一种对方法的包装。将方法包装成一个SEL类型的数据,然后对象根据数据找到对应方法地址,最后根据地址就可以调用相应方法。 

数据 -> 地址 ->方法

    2.实例分析

Person *p=[[Person alloc] init];
[p test];

原理图


对象调用方法的具体步骤:

a.把方法包装成SEL类型的数据(每个方法都有个对用的SEL数据)

b.根据SEL数据找到方法在类中的地址

c.根据方法地址调用对应的方法 

注意:在这个操作过程中有缓存,第一次找的时候是一个一个的找,非常耗性能,之后再用到的时候就直接使用

    3. SEL数据的创建

1>通过@select将方法转化为SEL数据

// 手工将run方法转化为SEL数据s
SEL s = @selector(run); 
// 使用SEL调用run方法
[p performSelector:s]; 

2>通过函数将字符串转化为SEL数据

// 通过方法名的字符串转化成SEL,然后再调用此方法
NSString *name = @"run"; 
SEL S1 = NSSelectorFromString(name);
[p performSelector:S1];

:_cmd 代表着当前方法。

// 将当前方法转化为SEL数据
[p performSelector:_cmd];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值