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

2017-03-14  本文已影响278人  Shelby_yao

今天下午想写一点关于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进行赋值.

上一篇下一篇

猜你喜欢

热点阅读