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