OC之description

简介:

打印对象用%@,比如打印字符串对象:

NSString *name = @”haha”;

NSLog(@”%@”,name);

输出结果为:haha

比如:

Person *p = [[Person alloc]init];

p.age = 20;

p.name = @”jack”;

NSLog(@”%@”,p);

会打印出对象p的所属类和内存地址。比如:<Person 0x100109e60>

默认情况下,除字符串对象外,使用NSLog和%@打印对象的结果都是<类名 对象所在内存地址>。使用NSLog和%@打印对象的步骤如下:

1.调用对象p-description方法

2.拿到-description方法的返回值(NSString*)显示到屏幕上

3.-description方法默认返回的是“类名+内存地址”

在必要情况下,我们需要重写description方法以达到改变输出结果目的,比如上述代码,_age和_name为成员变量,现在我们改写description方法:

@implementationPerson

—   (NSString *)description

{

return [NSString stringWithFormat:@”age= %dname =%@”,_age,_name];

}

@end

之后再调用NSLog(@”%@”,p)时输出结果不再是<Person 0x100109e60>而是age = 20name =jack

注意,上面重写的是“-”开头的description,还有一个以“+”开头的description,“+”开头的description决定的是类对象的输出结果,“-”开头的description决定的是实例对象的输出结果。

Class c = [Person class];

    // 1.会调用类的+description方法

    // 2.拿到+description方法的返回值(NSString *)显示到屏幕上

NSLog(@"%@", c);

输出结果为:Person

当然也可以像重写“-”开头的description一样去重写它。

【备注】类也是对象,任何类都是Class的对象,获得类对象(和类对象不是同一个概念)的方法为Class c = [Person class];


目录
相关文章
|
Java 应用服务中间件 Android开发
Description Resource Path LocationType Java compiler level does not match the version of the instal
Description Resource Path LocationType Java compiler level does not match the version of the instal
207 0
Description Resource Path LocationType Java compiler level does not match the version of the instal
Plugin [id: ‘com.github.kt3k.coveralls‘, version: ‘2.8.2‘] was not found in any of the following sou
Plugin [id: ‘com.github.kt3k.coveralls‘, version: ‘2.8.2‘] was not found in any of the following sou
130 0