iOS description與debugDescription在調試程序中的應用

iOS 中打印函數description與debugDescription的應用

1、description和debugDescription是什麼

        description和debugDescription是NSObject協議中的聲明的兩個方法,同時NSObject類也實現了這個方法,若是子類沒有重寫,則會調用父類的description和debugDescription方法。首先,這兩個方法適用於程序代碼的調試的,當咱們調用打印Log時,會向對象發送一個這樣的消息。函數

咱們先來看聲明部分的代碼:學習

+ (NSString *)description;
+ (NSString *)debugDescription;

這裏返回的字符串就是咱們打印在控制檯顯示的信息。測試

2、NSObject基類中的description方法是如何實現的

咱們寫以下的測試代碼:atom

 NSObject * objc = [[NSObject alloc]init];
 NSLog(@"objc:%@",objc);

控制檯輸出的信息以下:spa

能夠看到,方法的實現大體是這樣的:debug

-(NSString *)description{
    return [NSString stringWithFormat:@"<%@:%p>",[self class],&self];
}

3、重寫description方法

經過上面的介紹,咱們大體知道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函數時,打印結果以下:對象

是否是很炫酷,如此一來,咱們能夠將咱們基本不會用到的類名和地址轉換成打印數據,極大的方便了咱們代碼的調試工做。

4、description與debugDescription的區別

這兩個方法的區別僅僅在於調試的位置不一樣,調用不一樣的函數。description是咱們在程序中打Log會調用的方法,debugDescription則是咱們在斷點調試時,在控制檯使用po命令打印會調用的方法,好比咱們重寫Test類的這個方法:

-(NSString *)debugDescription{
    return [NSString stringWithFormat:@"<%@:%p>:%@",[self class],&self,@{@"name":_name,@"age":_age}];
}

而後咱們在程序中加個斷點運行,在程序斷掉以後,咱們在調試區輸入:po text,回車以後,會出現以下的信息:

 

學習使用 歡迎轉載

專一技術,熱愛生活,交流技術,也作朋友。

——琿少 QQ羣:203317592

相關文章
相關標籤/搜索