黑马程序员_OC基础04_description方法(自定义打印输出方法)

---------------------------------------- android培训java培训、期待与您交流! -------------------------------------------


一、-description方法(决定了实例对象的输出结果


使用NSLog和%@输出某个对象时,会调用对象的-description方法,并拿到返回值进行输出


二、+ description方法(决定了类对象的输出结果

使用NSLog和%@输出某个类对象时,会调用类对象+description方法,并拿到返回值进行输出

1)默认,不重写的输出
 Class c = [Person class];//得到类对象c
    // 1.会调用类的+description方法
    // 2.拿到+description方法的返回值(NSString *)显示到屏幕上
NSLog(@"%@", c);
输出:Person

2)重写在Person.m   的+description方法

// 决定了类对象的输出结果+ (NSString *)description
{
    return @"Abc";
}
执行1)中会输出:Abc


三、修改NSLog的默认输出

1、重写-description或者+description方法即可
1)在Person.m文件重写-description / +description方法

@implementation Person

// 决定了实例对象的输出结果
- (NSString *)description
{
    // 下面代码会引发死循环,不要在description 做输出
    // NSLog(@"%@", self);
    return [NSString stringWithFormat:@"age=%d, name=%@", _age, _name];
}
@end


2)在main.m文件
    Person *p = [[Person alloc] init];
    p.age = 20;
    p.name = @"Jack";
    // 默认情况下,利用NSLog和%@输出对象时,结果是:<类名:内存地址>
    
    // 1.会调用对象p的-description方法
    // 2.拿到-description方法的返回值(NSString *)显示到屏幕上
    // 3.-description方法默认返回的是“类名+内存地址”
    NSLog(@"%@", p);

3)输出:
age=20,name=Jack


四、  死循环陷阱(注意不要死循环
1、 如果在-description方法中使用NSLog打印self


五、  打印增强
Person *p = [[Person alloc] init];
1)打印对象地址:%p  如:NSLog(@"%p",p);  输出:0x100109760
2) 打印对象 <类名:对象地址>:%@   如:NSLog(@"%@",p);    输出:<Person: 0x100109760>
3) 指针变量的地址:NSLog(@"%@",&p);  输出:0x7fff5fbff7d0
4)打印当前行号:NSLog(@"%d", __LINE__);
5) NSLog输出C语言字符串的时候,不能有中文:NSLog(@"%s", __FILE__);
6) 输出源文件的名称: printf("%s\n", __FILE__);

7) 输出当前函数名: NSLog(@"%s\n", __func__);


---------------------------------------- android培训java培训、期待与您交流! -------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值