本小節(jié)知識點(diǎn):
- 【掌握】description基本概念
- 【掌握】description重寫的方法
- 【了解】description陷阱
1.description基本概念
NSLog(@"%@", object);這會(huì)自動(dòng)調(diào)用object的description方法來輸出object的描述信息.
description方法默認(rèn)返回對象的描述信息(默認(rèn)實(shí)現(xiàn)是返回類名和對象的內(nèi)存地址)
description方法是基類NSObject 所帶的方法,因?yàn)槠淠J(rèn)實(shí)現(xiàn)是返回類名和對象的內(nèi)存地址, 這樣的話,使用NSLog輸出OC對象,意義就不是很大,因?yàn)槲覀儾⒉魂P(guān)心對象的內(nèi)存地址,比較關(guān)心的是對象內(nèi)部的一些成變量的值。因此,會(huì)經(jīng)常重寫description方法,覆蓋description方法 的默認(rèn)實(shí)現(xiàn)
2.description重寫的方法
- 對象方法
/**對象方法:當(dāng)使用NSLog輸出該類的實(shí)例對象的時(shí)候調(diào)用*/
-(NSString *) description
{
return [NSString stringWithFormat:@"狗腿數(shù):%d,狗眼數(shù)%d\n",_legNum,_eyeNum];
}
- 類方法
/**類方法:當(dāng)使用NSLog輸出該類的類對象的時(shí)候調(diào)用*/
+(NSString *) description
{
return @"+開頭頭的description方法";
}
3.description陷阱
- 千萬不要在description方法中同時(shí)使用%@和self,下面的寫法是錯(cuò)誤的
- (NSString *)description {
return [NSString stringWithFormat:@"%@", self];
}
同時(shí)使用了%@和self,代表要調(diào)用self的description方法,因此最終會(huì)導(dǎo)致程序陷入死循環(huán),循 環(huán)調(diào)用description方法
當(dāng)[NSString stringWithFormat:@“%@”, self]; 使用它時(shí)署穗,循壞調(diào)用,導(dǎo)致系統(tǒng)會(huì)發(fā)生運(yùn)行時(shí)錯(cuò)誤嵌洼。
當(dāng)該方法使用NSLog(“%@”,self) 時(shí)候, 系統(tǒng)做了相關(guān)的優(yōu)化案疲,循壞調(diào)用3次后就會(huì)自動(dòng)退出