NSObject的描述(+description)方法和对象的描述(-description)方法,NSLog默认输出的修改(后知后觉)

一:-(NSString *)description;

有时候我们想要打印一下一个对象的内容看一下,

但是当我们采用下面的代码进行打印的时候,结果并不是我们想要的。

Cat *cat = [[Cat alloc]init];
NSLog(@"%@",cat);

输出:

2015-09-25 20:58:52.286 OCStudy[4195:1476050] <Cat: 0x100300660>
我们看到的结果是     类名:对象地址

我们会看到NSObject中有+description这个类方法,同样对象中也有-description方法,并且返回值多是NSString

NSLog中我们打印一个对象的时候,它实际上会调用对象的-description方法,返回一个NSString

这样,我们可以通过重写对象类中的-description方法,从而输出对象中的内容,如下:

//
//  Cat.h
//  OCStudy
//
//  Created by LiuMingchuan on 15/9/25.
//  Copyright © 2015年 LMC. All rights reserved.
//

#import "Animal.h"

@interface Cat : Animal

@property (nonatomic,strong) NSString *name;
@property (nonatomic,assign) int sex;
@property (nonatomic,assign) int age;
@property (nonatomic,strong) NSString *address;

@end

//
//  Cat.m
//  OCStudy
//
//  Created by LiuMingchuan on 15/9/25.
//  Copyright © 2015年 LMC. All rights reserved.
//

#import "Cat.h"

@implementation Cat

@synthesize name;
@synthesize sex;
@synthesize age;
@synthesize address;

-(NSString *)description {
    return [NSString stringWithFormat:@"Cat\n{Name:%@\nSex:%@\nAge:%d\nAddress:%@\n}",self.name,self.sex==0?@"母":@"公",self.age,self.address];
}

@end

Cat *cat = [[Cat alloc]init];
NSLog(@"%@",cat);

输出:
2015-09-25 21:08:14.983 OCStudy[4234:1517797] Cat
{Name:Tom
Sex:公
Age:5
Address:United States of America
}
注意:以前说是在-description中不能使用NSLog打印self,会造成死循环,但是现在似乎不会造成死循环,我试验了一把,没有死循环,但是执行调用了4次,这一块还不太清楚!
二:+(NSString *)description;

同样如果我们想输出类中的信息

 Class catClass = [Cat class];
 NSLog(@"%@",catClass);
输出

2015-09-25 21:08:14.983 OCStudy[4234:1517797] Cat
我们看到只是输出了类的名字

NSLog中我们打印一个类对象的时候,它实际上会调用类的+description方法,返回一个NSString
同样我们也可以通过修改类的+description方法,指定输出的内容

//
//  Cat.m
//  OCStudy
//
//  Created by LiuMingchuan on 15/9/25.
//  Copyright © 2015年 LMC. All rights reserved.
//

#import "Cat.h"

@implementation Cat

+(NSString *)description{
    return [NSString stringWithFormat:@"%s",__FUNCTION__];
}
@end


 Class catClass = [Cat class];
 NSLog(@"%@",catClass);

输出

2015-09-25 21:19:24.253 OCStudy[4278:1573594] +[Cat description]



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值