/*
description方法:
description方法是NSObject类的一个类方法;
+ (NSString *)description;
这个方法的返回值是NSString *类型的,其输出的默认格式为<YYPerson: 0x100401420>:即<对象所属的类名:对象的地址>;
如下代码:
人类对象xiaoxue调用默认的description方法.
重写description方法:
如果想要自定义打印对象的格式,那么可以重写description方法.
如下代码:
学生类对象xiaoming调用重写之后的自定义description方法.
*/
#import <Foundation/Foundation.h>
#pragma mark -
#pragma mark 人类的创建
//创建人类
//声明
@interface YYPerson : NSObject
{
NSString *_name;
int _age;
}
- (void)setName:(NSString *)name;
- (NSString *)name;
- (void)setAge:(int)age;
- (int)age;
- (void)sayHi;
@end
//实现
@implementation YYPerson
- (void)setName:(NSString *)name
{
_name = name;
}
- (NSString *)name
{
return _name;
}
- (void)setAge:(int)age
{
_age = age;
}
- (int)age
{
return _age;
}
- (void)sayHi;
{
NSLog(@"大家好!我叫%@, 今年%d岁了.", _name, _age);
}
@end
#pragma mark -
#pragma mark 学生类的创建
//创建学生类:继承自人类
//声明
@interface YYStudent : YYPerson
@end
//实现
@implementation YYStudent
//子类重写description方法
- (NSString *)description
{
NSString *description = [NSString stringWithFormat:@"姓名:%@ 年龄:%d", _name, _age];
return description;
}
@end
#pragma mark -
#pragma mark main函数
//main函数
int main(int argc, const char * argv[]) {
//创建人对象
YYPerson *xiaoxue = [YYPerson new];
//赋值属性
[xiaoxue setName:@"小雪"];
[xiaoxue setAge:18];
//调用方法:人类对象xiaoxue调用默认的description方法.
[xiaoxue sayHi];
NSString *description = [xiaoxue description];
NSLog(@"description = %@", description);
//+ (NSString *)description;
//这个方法的返回值是NSString *类型的,其输出的默认格式为<YYPerson: 0x100401420>:即<对象所属的类名:对象的地址>;
//输出结果为:description = <YYPerson: 0x100401420>
NSLog(@"xiaoxue = %p", xiaoxue);
//使用%p占位符可以打印指针变量xiaoxue的值,也就是对象的地址.
//输出结果为:xiaoxue = 0x100401420
NSLog(@"xiaoxue = %@", xiaoxue);
//使用%@打印的是指针指向的对象.
//其输出的格式为<YYPerson: 0x100401420>:即<对象所属的类名:对象的地址>;与类方法description输出的内容相同;
//输出结果为:xiaoxue = <YYPerson: 0x100401420>
//创建学生对象
YYStudent *xiaoming = [YYStudent new];
//赋值属性
[xiaoming setName:@"小明"];
[xiaoming setAge:18];
//调用方法:学生类对象xiaoming调用重写之后的自定义description方法.
NSLog(@"%@", [xiaoming description]);
return 0;
}