打印对象用%@,比如打印字符串对象:
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= %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];