首页 > 其他分享 >Apple开发_打印一个实例对象中的属性与值,包括在父类中的

Apple开发_打印一个实例对象中的属性与值,包括在父类中的

时间:2023-10-24 14:07:05浏览次数:33  
标签:父类 Apple value 与值 key array property class target

#import <objc/runtime.h>

// 打印一个实例对象中的属性与值,包括在父类中的
- (void)print_Self_Properties {
    
// DEBUG  模式下打印日志,当前行
#ifdef DEBUG
    
    unsigned int count = 0;
    Class gc_class = [self class];
    GCLog(@"统计开始 ⌛️")
    NSMutableArray *key_array = [[NSMutableArray alloc] init];
    NSMutableArray *target_array = [[NSMutableArray alloc] init];
    
    while (gc_class) {
        // 获取类的属性列表
        objc_property_t *properties = class_copyPropertyList(gc_class, &count);
        
        for (NSInteger index = 0; index < count; index++) {
            // 获取属性的名称
            objc_property_t property = properties[index];
            //const char *property_name = property_getName(property);
            NSString *property_name = [NSString stringWithCString:property_getName(property)
                                                encoding:NSUTF8StringEncoding];
            
            @try {
                // 获取属性对应的值
                id value = [self valueForKey:property_name];
                if (value) {
                    if (![key_array containsObject:property_name]) {
                        [key_array addObject:property_name];

                        NSString *key_object = NSStringFormat(@"%@ = %@", property_name, value);
                        if ([value isKindOfClass:[NSString class]]) {
                            //[target_array addObject:key_object];
                        }
                        else if ([value isKindOfClass:[@(YES) class]]) {
                            [target_array addObject:key_object];
                        }
                        else if ([value isKindOfClass:[NSNumber class]]) {
                            //[target_array addObject:key_object];
                        }
                        else if ([value isKindOfClass:[@(CGRectZero) class]]) {
                            //[target_array addObject:key_object];
                        }
                        else if ([value isKindOfClass:[@(CGSizeZero) class]]) {
                            //[target_array addObject:key_object];
                        }
                    }
                }
            }
            @catch (NSException *exception) {
                
            }
        }
        
        // 释放内存
        free(properties);
        // 将父类作为当前类继续循环
        gc_class = class_getSuperclass(gc_class);
    }
    
    if (target_array.count) {
        // 排序
        NSArray *sorted_array = [target_array sortedArrayUsingSelector:@selector(compare:)];
        for (NSInteger index = 1; index <= sorted_array.count; index++) {
            GCLog(@"键值对[%03ld]:%@", index, sorted_array[index - 1]);
        }
    }
    
    GCLog(@"统计结束 

标签:父类,Apple,value,与值,key,array,property,class,target
From: https://blog.51cto.com/u_15318120/8003303

相关文章

  • uboot配置usbhost及代码初步分析--Apple的学习笔记
    一,前言之前uboot没配置过usb,但是现在uboot基于DM模型基本和linuxdriver类似了。那么为了学习linuxdriver,我可以先学习uboot来做技术储备也是一样的。而且usb在uboot上应该也有用武之地,所以有必要进行刻意练习。二,分析1,之前对发现driver用了wraper的方式来打包进行绑定,我理解唯一......
  • Xcode 15.0.1 (15A507) 发布下载 - Apple 平台 IDE
    Xcode15.0.1(15A507)-Apple平台IDEIDEforiOS/iPadOS/macOS/watchOS/tvOS/visonOS请访问原文链接:https://sysin.org/blog/apple-xcode-15/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgvisonOS支持已更新。Xcode15使您能够为所有Apple平台开发、测......
  • uboot为LED添加DM驱动--Apple的学习笔记
    一,前言开始玩所有板子一般都是先点灯,比如我可以在汇编中点灯,可以在board_init中用writel写寄存器点灯,当我要进一步熟悉下设备树驱动模型,不管学习linux还是学习uboot这块我理解类似,所以我要通过添加设备树及配置开关来实现默认打开led0和led1的功能。二,实现的过程1,先有了dts信息,我从......
  • uboot定制自己的板子--Apple的学习笔记
    一,前言既然下载了最新的uboot版本,那么就玩玩吧,先要定制自己的板子。二,问题分析及解决1,出错信息U-BootSPL2023.10(Oct192023-19:58:50+0800)TryingtobootfromMMC1U-Boot2023.10(Oct192023-19:58:50+0800)AppleCai'sam335BoardCPU:AM335X-GPrev2.1......
  • 补:子类父类关系
    packagehomework;publicclasstext{publicStringtoString(){return"FruittoString.";}publicstaticvoidmain(Stringargs[]){textf=newtext();System.out.println("f="+f);......
  • Apple macOS Sonoma All In One
    ApplemacOSSonomaAllInOneMBP2018✅/Macmini2018✅macOSSonomafeaturesHRD240FPS慢动作视频壁纸https://www.apple.com/macos/sonoma/https://www.apple.com/macos/sonoma/pdf/macOS_All_New_Features.PDFdemos(......
  • 海外apple 登陆 快速配置 Sign In with Apple
    登录Apple开发者账号。我们需要获得具有SignInwithApple功能的AppId。•进入Certificates,Identifiers&Profiles>Identifiers,然后单击Identifiers旁边左上角的+号;•选择AppIDs并点击继续; 在此处输入任意Description和BundleID(Apple建议使用反......
  • boot驱动模型中的常用API--Apple的学习笔记
    一,前言之前解决ping问题的过程中,需要看uboot的代码,感觉看起来很轻松,我一直觉得代码写的小学生都能看懂的,这才是高手写的代码。面向对象设计的好,封装做的也好。虽然和qemu的Qobject设计雷同,但是我又手痒想画图了。二,学习1,uclass_find(id)根据uclassid来找uclass。在gd->uclass_roo......
  • 解决uboot ping不通的硬件问题--Apple的学习笔记
    一,前言之前uboot偶尔第一次上电会ping通一次,之后就ping不通,我以为电源问题,好像也不是,然后我又认为是交叉网线问题,我用的可能是直连网线,之前用的交叉网线头子坏了我就丢了。于是网上买了新的交叉网线,到货后依然ping不通,而且一次都不行了。难道代码有问题,于是用了我之前的uboot代码,结......
  • 产品代码都给你看了,可别再说不会DDD(七):实体与值对象
    这是一个讲解DDD落地的文章系列,作者是《实现领域驱动设计》的译者滕云。本文章系列以一个真实的并已成功上线的软件项目——码如云(https://www.mryqr.com)为例,系统性地讲解DDD在落地实施过程中的各种典型实践,以及在面临实际业务场景时的诸多取舍。本系列包含以下文章:DDD入门DD......