美文网首页
[iOS开发]简单说一下runtime中打印成员变量(上)

[iOS开发]简单说一下runtime中打印成员变量(上)

作者: Shelby_yao | 来源:发表于2017-03-14 17:20 被阅读278次

    今天下午想写一点关于iOS开发中需要用到的runtime的相关内容,这一部分说的是打印某类的相关成员变量(记得要加上#import <objc/runtime.h>)

    + (void)getProperties:(Class )cls{
        unsigned int count = 0;
        objc_property_t *properties = class_copyPropertyList(cls, &count);
        for (int i = 0; i<count; i++) {
            // 取出属性
            objc_property_t property = properties[i];
            // 打印属性名字
            NSLog(@"%s   <---->   %s", property_getName(property), property_getAttributes(property));
        }
        free(properties);
    }
    

    这个是用来打印类的所有属性,我直接写在原始的ViewController中,调用方法很简单
    [ViewController getProperties:[UIButton class]];
    另一个是打印成员变量

    + (void)getIvars:(Class)cls{
        unsigned int count = 0;
        // 拷贝出所有的成员变量列表
        Ivar *ivars = class_copyIvarList(cls, &count);
        for (int i = 0; i<count; i++) {
            // 取出成员变量
            //        Ivar ivar = *(ivars + i);
            Ivar ivar = ivars[i];
            // 打印成员变量名字
            NSLog(@"%s %s", ivar_getName(ivar), ivar_getTypeEncoding(ivar));
        }
        // 释放
        free(ivars);
    }
    

    调用方法一致
    [ViewController getIvars: [UIButton class]];
    在这里需要注意,打印成员变量虽然是runtime的一个功能,可是最终目的是要想办法给那些个藏起来的私有成员变量赋值,这里就要用到KVC进行赋值.

    相关文章

      网友评论

          本文标题:[iOS开发]简单说一下runtime中打印成员变量(上)

          本文链接:https://www.haomeiwen.com/subject/iddhnttx.html