首页 > 代码库 > 使用runtime获取属性

使用runtime获取属性

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #3495af } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000; min-height: 15.0px } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #b4261a } span.s1 { color: #000000 } span.s2 { } span.s3 { color: #0433ff } span.s4 { color: #3495af }</style>

在   YuansPerson 类中定义属性(在.h 和.m 中定义都可以)

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000; min-height: 15.0px } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } span.s1 { } span.s2 { color: #0433ff }</style>

class_copyIvarList:获取类的所有属性变量,count记录变量的数量IVar是runtime声明的一个宏,是实例变量的意思,instance variable,在runtime中定义为 typedef struct objc_ivar *Ivari

var_getName:将IVar变量转化为字符串

ivar_getTypeEncoding:获取IVar的类型

 

 object_setIvar(<#id obj#>, <#Ivar ivar#>, <#id value#>)  :  可以强制修改原属性的值

 

 

 YuansPerson *yuansPerson = [YuansPerson new];

 

 unsigned int count = 0;

 Ivar *nameList = class_copyIvarList([YuansPerson class], &count);

    

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

        

        Ivar var = nameList[i];

        const char *name = ivar_getName(var) ;

        const char *type = ivar_getTypeEncoding(var);

        

        NSLog(@"name = %s type = %s",name,type);

    

         

    }

    

 

 

 

 

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } span.s1 { }</style>

使用runtime获取属性