打印对象用%@,好比打印字符串对象:spa
NSString *name = @”haha”;orm
NSLog(@”%@”,name);对象
输出结果为:hahaip
好比:内存
Person *p = [[Person alloc]init];字符串
p.age = 20;string
p.name = @”jack”;it
NSLog(@”%@”,p);io
会打印出对象p的所属类和内存地址。好比:<Person 0x100109e60>class
默认状况下,除字符串对象外,使用NSLog和%@打印对象的结果都是<类名 对象所在内存地址>。使用NSLog和%@打印对象的步骤以下:
1.调用对象p的-description方法
2.拿到-description方法的返回值(NSString*)显示到屏幕上
3.-description方法默认返回的是“类名+内存地址”
在必要状况下,咱们须要重写description方法以达到改变输出结果目的,好比上述代码,_age和_name为成员变量,如今咱们改写description方法:
@implementationPerson
— (NSString *)description
{
return [NSString stringWithFormat:@”age= %d,name =%@”,_age,_name];
}
@end
以后再调用NSLog(@”%@”,p)时输出结果再也不是<Person 0x100109e60>,而是age = 20,name =jack
注意,上面重写的是“-”开头的description,还有一个以“+”开头的description,“+”开头的description决定的是类对象的输出结果,“-”开头的description决定的是实例对象的输出结果。
Class c = [Person class];
// 1.会调用类的+description方法
// 2.拿到+description方法的返回值(NSString *)显示到屏幕上
NSLog(@"%@", c);
输出结果为:Person
固然也能够像重写“-”开头的description同样去重写它。
【备注】类也是对象,任何类都是Class的对象,得到类对象(和类的对象不是同一个概念)的方法为Class c = [Person class];