如何访问和修改一个对象的私有属性
2017-06-15 18:11
363 查看
有两个思路:
KVC
runtime
先给出我们接下来要使用的类:
KVC是苹果推荐用来做类似事情的方法,所以这种需求,KVC解决是最好的,代码简洁,效率也比较高。
关于KVC的相关内容可以看下KVC详解
runtime的做法相对来讲代码比较多,也不够简洁,但是还是可以实现这个需求的。runtime的详细内容可以参考iOS Runtime 详解
KVC
runtime
先给出我们接下来要使用的类:
@interface Person : NSObject @end @interface Person() @property (nonatomic, copy) NSString *name; @end @implementation Person @end
KVC
KVC是我比较推荐的,代码如下:Person *person = [Person new]; [person setValue:@"new name" forKey:@"name"]; NSString *name = [person valueForKey:@"name"];
KVC是苹果推荐用来做类似事情的方法,所以这种需求,KVC解决是最好的,代码简洁,效率也比较高。
关于KVC的相关内容可以看下KVC详解
runtime
runtime的思路就是先读取对象的所有属性,然后找到对象的属性,赋值。代码如下:Person *person = [Person new]; 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); NSString *memberNameString = [NSString stringWithFormat:@"%s",memberName]; if ([memberNameString isEqualToString: @"_name"]) { object_setIvar(person, ivar, @"newName"); } }
runtime的做法相对来讲代码比较多,也不够简洁,但是还是可以实现这个需求的。runtime的详细内容可以参考iOS Runtime 详解
相关文章推荐
- 如何访问一个文件的创建、修改时间、文件属性
- 访问或修改一个类的私有属性
- iOS中访问和修改一个类的私有属性
- iOS开发中访问并修改一个类的私有属性
- 如何在PowerShell中得到一个对象的所有属性名和方法名呢?
- 为什么一个对象调用的类方法可以访问该类其他对象的私有成员
- AS、Flex如何循环调用一个对象的属性、方法
- 写一个方法进行各种属性的更新,而不要每个界面设置改变都改变一个属性。就是点击应用或确定按钮时调用这个更新属性的方法,遍历所有(控制对象属性的)界面控件的状态(值),进行属性修改和刷新。
- ALTER TABLE 修改表时 因为有一个或多个对象访问此列
- 如何: 通过HTML文档对象模型访问文档中的ActiveX控件的属性
- 如何实现Windows系统Users组用户可修改IP属性和限制Users组用户访问文件的权限!
- 如何编程修改一个隶属于视图的对象颜色
- 如何利用反射去访问一个私有的方法
- 用简单的方法来访问GObject对象的私有属性
- 本类的方法可以访问本类的任何一个对象的私有域、
- 在C#如何遍历一个对象的所有属性
- Java: 如何访问一个对象
- 如何使CheckBoxList的Attributes属性生效(修改微软的一个bug)
- AS、Flex如何循环调用一个对象的属性、方法
- 如何构建一个名字成员在类外可以被修改而在内部是只读的对象