description和debugDescription是NSObject協議中的聲明的兩個方法,同時NSObject類也實現了這個方法,若是子類沒有重寫,則會調用父類的description和debugDescription方法。首先,這兩個方法適用於程序代碼的調試的,當咱們調用打印Log時,會向對象發送一個這樣的消息。函數
咱們先來看聲明部分的代碼:學習
+ (NSString *)description; + (NSString *)debugDescription;
這裏返回的字符串就是咱們打印在控制檯顯示的信息。測試
咱們寫以下的測試代碼:atom
NSObject * objc = [[NSObject alloc]init]; NSLog(@"objc:%@",objc);
控制檯輸出的信息以下:spa
能夠看到,方法的實現大體是這樣的:debug
-(NSString *)description{ return [NSString stringWithFormat:@"<%@:%p>",[self class],&self]; }
經過上面的介紹,咱們大體知道description方法的原理了,在程序調試時,咱們能夠充分利用這個方法帶來的便利,大大縮減咱們調試程序所須要的時間。例如:建立一個Test類,給它定義兩個屬性以下:調試
Text.hcode
#import <Foundation/Foundation.h> @interface TestObject : NSObject @property(nonatomic,strong)NSString * name; @property(nonatomic,strong)NSString * age; @end
咱們在.m文件中將description方法重寫:orm
#import "TestObject.h" @implementation TestObject -(NSString *)description{ return [NSString stringWithFormat:@"%@",@{@"name":_name,@"age":_age}]; } @end
重寫的方法將Test類對象的屬性打印了出來,這時咱們在調用NSLog函數時,打印結果以下:對象
是否是很炫酷,如此一來,咱們能夠將咱們基本不會用到的類名和地址轉換成打印數據,極大的方便了咱們代碼的調試工做。
這兩個方法的區別僅僅在於調試的位置不一樣,調用不一樣的函數。description是咱們在程序中打Log會調用的方法,debugDescription則是咱們在斷點調試時,在控制檯使用po命令打印會調用的方法,好比咱們重寫Test類的這個方法:
-(NSString *)debugDescription{ return [NSString stringWithFormat:@"<%@:%p>:%@",[self class],&self,@{@"name":_name,@"age":_age}]; }
而後咱們在程序中加個斷點運行,在程序斷掉以後,咱們在調試區輸入:po text,回車以後,會出現以下的信息:
學習使用 歡迎轉載
專一技術,熱愛生活,交流技術,也作朋友。
——琿少 QQ羣:203317592