Obbjective-c - description方法和 description方法的重写

本文详细介绍了Objective-C中NSObject类的description方法及其重写方式。通过实例展示了默认description方法的输出格式,并提供了如何自定义description方法的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*

 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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值