開發中經過NSLog的%@打印自定義的對象時,
只會打印出一個對象的內存地址。debug
例如:(xxxview:0xb677420)調試
可是打印系統的類型,例如NSArray就不會這樣。日誌
這是爲何呢?code
緣由:打印到日誌時,對象會收到description消息,該方法所返回的描述信息將取代「%@」。orm
因此重寫這個description方法就能夠設定打印的東西。對象
還有一個方法能夠重寫,就是debugDescription方法:是開發者在調試器中以控制檯命令打印對象時才調用的。在NSObject類的默認實現中,此方法只是直接調用了description。ip
當但願調試的時候能夠看見打印的地址和信息,在正常打印的時候不須要地址時候,就能夠像下面這樣重寫兩個方法。內存
- (NSString *)description { return [NSStringstringWithFormat:@"<%@>",@{@"name":_name,@"work":_work}]; } - (NSString *)debugDescription { return [NSStringstringWithFormat:@"<%@ : %p, %@>",[selfclass],self,@{@"name":_name,@"work":_work}]; }