美文网首页
访问并修改一个类的私有属性

访问并修改一个类的私有属性

作者: 骑着毛驴走起来 | 来源:发表于2018-03-20 21:41 被阅读18次

       在OC中的类会有某些私有属性,这些属性通常写在.m文件中或在.h文件中用@private关键字进行修饰。某些类之所以有某些私有属性是因为不想这些属性被外界访问并修改。但我们仍能对私有属性进行访问和修改。访问以及修改私有属性有两种方式:KVC、runtime。

1.KVC

我们可以用setValue:的方法设置私有属性,并利用valueForKey:的方法访问私有属性。假设我们有一个类Person,并且这个类有一个私有属性name。看代码:

// 利用KVC访问私有属性

 Person * ls = [[Person alloc] init];

 [ls setValue:@"wo" forKey:@"name"];

 NSLog(@"===%@", [ls valueForKey:@"name"];

)

2.runtime

我们可以利用runtime获取某个类的所有属性(私有属性、非私有属性),在获取到某个类的属性后就可以对该属性进行访问以及修改了。

 // 利用run time访问并修改私有属性

 Person *p = [Person new];

 // IVar是runtime声明的一个宏

 unsigned int count = 0; //count记录变量的数量

 // 获取类的所有属性变量

 Ivar *members = class_copyIvarList([Person class], &count);

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

 Ivar ivar = members[i];

 // 取得属性名并转成字符串类型

 const char *memberName = ivar_getName(ivar);

 NSLog(@"%s",memberName);

 Ivar name = members[0];

 // 修改属性值

 object_setIvar(p, name, @"bushiwo");

    }

 NSLog(@"%@", [p valueForKey:@"name"]);

相关文章

网友评论

      本文标题:访问并修改一个类的私有属性

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