zoukankan      html  css  js  c++  java
  • iOS遍历类中的属性名runtime

    栗子:有一个ZHHAssertNewNew类,类中有两个属性

    @property (nonatomic, strong) NSString* name;

    @property (nonatomic, assign) int age;

    1,导入#import <objc/runtime.h>

    2,实现方法

    void test() {

        u_int count = 0;

        Ivar* ivars = class_copyIvarList(objc_getClass("ZHHAssertNewNew"), &count);

        

        for (int i=0; i<count; i++) {

            Ivar ivar = ivars[i];

            //name

            const char* name = ivar_getName(ivar);

            NSLog(@"name->%s",name);

            

            //type

            const char* type = ivar_getTypeEncoding(ivar);

            NSLog(@"type->%s",type);

            

            //得到实际的类型

            Class c = realTypeWithType(type);

            NSLog(@"class->%@",c);

            

            /* log打印结果

            name->_age

            type->i

            class->(null)

            

            name->_name_

            type->@"NSString"

            class->NSString

             */

            /*

            关于type

            如果返回i代表int类型

            如果返回@"NSString"代表NSString

            ...同理

             */

            

        }

      //释放:与copy对应

         free(ivars);

    }

    //通过返回类型返回实际类型

    Class realTypeWithType(const char* type) {

        NSString* code = [NSString stringWithUTF8String:type];

        

        if ([code hasPrefix:@"@"] && (code.length > 3)) {

            //去掉前面的@"和后面的"

            code = [code substringFromIndex:2];

            code = [code substringToIndex:code.length-1];

            return NSClassFromString(code);

        }

        

        

        //基本数据类型没做处理

        return nil;

    }

    3,调用.

  • 相关阅读:
    [MacOS]Sublime text3 安装(一)
    [RHEL8]开启BBR
    PAT Advanced 1136 A Delayed Palindrome (20分)
    PAT Advanced 1144 The Missing Number (20分)
    PAT Advanced 1041 Be Unique (20分)
    PAT Advanced 1025 PAT Ranking (25分)
    PAT Advanced 1022 Digital Library (30分)
    PAT Advanced 1019 General Palindromic Number (20分)
    PAT Advanced 1011 World Cup Betting (20分)
    PAT Advanced 1102 Invert a Binary Tree (25分)
  • 原文地址:https://www.cnblogs.com/iOS771722918/p/4452577.html
Copyright © 2011-2022 走看看