zoukankan      html  css  js  c++  java
  • iOS模型输出和打印

    在调试时,我们经常用到输出model,查看数据是否正确,还会在控制台"po 模型"操作,一般输出都是这样的格式的:

    person is <Person: 0x608000034300>

    这里添加一种解决方法:

    1> 解决NSLog(@"person is %@", p)打印model内容:

    //
    //  Person.m
    //  Demo1
    //
    //  Created by 思 彭 on 2017/7/31.
    //  Copyright © 2017年 思 彭. All rights reserved.
    //
    
    #import "Person.h"
    #import <objc/runtime.h>
    
    @implementation Person
    
    // 通过重写模型的description方法,实现打印Model
    
    - (NSString *)description {
        
        // 初始化一个字典
        NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
        // 得到当前classs的所有属性
        uint count;
        objc_property_t *properties = class_copyPropertyList([self class], &count);
        for (int i = 0; i < count; i++) {
            // 循环并用kvc得到每个属性的值
            objc_property_t property = properties[i];
            NSString *name = @(property_getName(property));
            id value = [self valueForKey:name] ? : nil;  // 默认值为nil字符串
            [dictionary setObject:value forKey:name];
        }
        // 释放
        free(properties);
        // return
        return [NSString stringWithFormat:@"<%@: %p> -- %@",[self class], self, dictionary];
    }
    @end

    2>po model输出model内容:

    //
    //  NSObject+DebugDescription.m
    //  Demo1
    //
    //  Created by 思 彭 on 2017/7/31.
    //  Copyright © 2017年 思 彭. All rights reserved.
    //
    
    #import "NSObject+DebugDescription.h"
    #import <objc/runtime.h>
    
    @implementation NSObject (DebugDescription)
    
    - (NSString *)debugDescription {
        if ([self isKindOfClass:[NSArray class]] || [self isKindOfClass:[NSNumber class]] || [self isKindOfClass:[NSString class]]) {
            return  self.debugDescription;
        }
        // 初始化一个字典
        NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
        // 得到当前classs的所有属性
        uint count;
        objc_property_t *properties = class_copyPropertyList([self class], &count);
        for (int i = 0; i < count; i++) {
            // 循环并用kvc得到每个属性的值
            objc_property_t property = properties[i];
            NSString *name = @(property_getName(property));
            id value = [self valueForKey:name] ? : nil;  // 默认值为nil字符串
            [dictionary setObject:value forKey:name];
        }
        // 释放
        free(properties);
        // return
        return [NSString stringWithFormat:@"<%@: %p> -- %@",[self class], self, dictionary];
    }
    
    @end

    使用:

    //
    //  ViewController.m
    //  Demo1
    //
    //  Created by 思 彭 on 2017/7/31.
    //  Copyright © 2017年 思 彭. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "Person.h"
    #import "NSObject+DebugDescription.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        
        Person *p = [Person new];
        p.name = @"sis";
        p.age = 30;
        p.habit = @"singer, dancer";
        NSLog(@"person is %@", p);  // person is <Person: 0x608000034300>
    }
    
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    
    @end

    注意:

    在使用控制器类需要导入该Category哟!!!

  • 相关阅读:
    轻松完成mysql4.1与mysql4.0数据库转换备份
    MYSQL数据迁徙tips,ORA00907: missing right parenthesis
    viking病毒再次感染公司LAN
    [恢]hdu 2032
    [恢]hdu 2042
    [恢]hdu 2033
    [恢]hdu 2039
    [恢]hdu 2029
    [恢]hdu 2010
    [恢]hdu 2016
  • 原文地址:https://www.cnblogs.com/pengsi/p/7261550.html
Copyright © 2011-2022 走看看