實(shí)現(xiàn) description 方法 — 細(xì)看信息

2017新年快樂(lè)
2017新年快樂(lè)

在調(diào)試程序的時(shí)候,我們經(jīng)常需要打印并查看對(duì)象信息。一種辦法是將對(duì)象的全部屬性打印出來(lái),另一種是挑選我們需要的信息。

NSLog(@"obj = %@",obj);
這種打印全部屬性只適用于 iOS 原有的對(duì)象類(lèi)型,而自定義的類(lèi)型將只是輸出下面這樣的信息:

< Person: 0x6080000258e0>
自定義的類(lèi)輸出的信息并不太有用,所以我們需要自己去實(shí)現(xiàn)這個(gè) description 辦法。
//
//  YYObject.h
//  YYLog

#import <Foundation/Foundation.h>

@interface YYObject : NSObject

@property (nonatomic,copy) NSString *firstName;
@property (nonatomic,copy) NSString *lastName;

@end



//
//  YYObject.m
//  YYLog

#import "YYObject.h"
#import <objc/runtime.h>

@implementation YYObject

- (instancetype)init
{
    if (self = [super init]) {

    }
    return self;
}

-(NSString *)description
{    
    return [NSString stringWithFormat:@"< %@: %p,firstName: %@,lastName:%@>",[self class],self,_firstName,_lastName];
}
@end
  
  //打印出來(lái)的信息如下:
  person:< Person: 0x60000002af80,firstName: wu,lastName:yy>

通過(guò)自己去實(shí)現(xiàn) description 辦法,是可以將我們需要的屬性信息打印出來(lái)。有一個(gè)問(wèn)題就是如果自定義的類(lèi)屬性很多,逐步去實(shí)現(xiàn)屬性是很浪費(fèi)時(shí)間的,所以利用 Runtime 進(jìn)行 description 的改造。
-(NSString *)description
{
    NSLog(@"father's description!");
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    unsigned int count = 0;
    Ivar *ivars = class_copyIvarList([self class], &count);
    for (NSUInteger i = 0; i < count; i ++) {
        Ivar ivar = ivars[i];
        const char *name = ivar_getName(ivar);
        NSString *key = [NSString stringWithUTF8String:name];
        id value = [self valueForKey:key];
        [dict setObject:value forKey:key];
    }
    free(ivars);
    
    return [NSString stringWithFormat:@"< %@: %p, %@>",[self class],self,dict];
    
//    return [NSString stringWithFormat:@"< %@: %p,firstName: %@,lastName:%@>",[self class],self,_firstName,_lastName];
}
可以將此自定義的類(lèi)作為基類(lèi),之后的自定義類(lèi)繼承其,這樣就很方便打印出自定義類(lèi)的全部的屬性了。

demo:https://github.com/CrusherWu/description

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 12,355評(píng)論 6 13
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,939評(píng)論 25 709
  • 123.繼承 一個(gè)類(lèi)可以從另外一個(gè)類(lèi)繼承方法,屬性和其他特征。當(dāng)一個(gè)類(lèi)繼承另外一個(gè)類(lèi)時(shí), 繼承類(lèi)叫子類(lèi), 被繼承的...
    無(wú)灃閱讀 1,491評(píng)論 2 4
  • 前言 本文主要內(nèi)容是對(duì)iOS的WebViewJavascriptBridge源碼進(jìn)行分析梳理,分為iOS端調(diào)用JS...
    EA88閱讀 1,470評(píng)論 0 1
  • 我說(shuō)我是一條波濤洶涌的河流, 浪花歡快地拍打著你的心岸, 愉悅的回聲傳揚(yáng)到四方。 你說(shuō)你不喜歡這驚濤駭浪, 你怕它...
    天堂里的魚(yú)閱讀 217評(píng)論 0 0

友情鏈接更多精彩內(nèi)容