OC学习笔记之description

description介绍

description方法是NSObject自带的方法,返回值类型是NSString类型。当使用%@打印对象,会调用对象方法-(NSString *)description方法;使用%@打印类时,会调用+(NSString *)description方法;
在使用%@打印对象的时候,我们知道,如果对象是NSString类型的,那么打印内容就是对象字符串,但是其他的非NSString对象,则是打印<类名:内存地址>( <Dog: 0x1001030d0>)。这种打印结果在实际中并没有什么意义,因为使用者并不会关心内存,而使关心需要打印什么信息,所以需要重写NSObject的-(NSString *)description方法。
同理,在使用%@打印类的时候,NSLog(@"%@",[str class]),我们知道,打印的结果只是类名,并没有什么实际意义,所以也需要重写+(NSString)description方法

重写description对象方法和类方法

Person.h文件

#import <Foundation/Foundation.h>
@interface Person : NSObject
@property(nonatomic,assign)int age;
@property(nonatomic,copy)NSString *name;
@end

Person.m文件

#import "Person.h"

@implementation Person
-(NSString *)description{
    NSString *str = [[NSString alloc]initWithFormat:@"姓名:%@ ,年龄:%d",_name,_age];
    return str;
    //return [[NSString alloc]initWithFormat:@"姓名:%@ ,年龄:%d",_name,_age];
}
+(NSString *)description{
    //NSString *str = [[NSString alloc]initWithFormat:@"姓名:%@ ,年龄:%d",_name,_age];---这种写法是错误的,不能在类方法中,是不能够访问实例变量的
    return @"这是类方法";
}
@end

循环调用description问题

Dog.h文件

#import <Foundation/Foundation.h>
@interface Dog : NSObject
@property(nonatomic,assign)int age;
@end

Dog.m文件

#import "Dog.h"

@implementation Dog
-(NSString *)description{
    return [[NSString alloc]initWithFormat:@"%@",self];//-------死循环,编译的时候不会出错,执行的时候才报错
}
+(NSString *)description{
    return [[NSString alloc]initWithFormat:@"%@",self];//-------死循环,编译的时候并不会出错,执行的时候才会报错
}
@end

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值