iOS 如何访问私有变量

方法1:

如果你能看到类的实现以及私有成员,可以使用kvc

设置私有成员:

- (void)setValue:(nullableid)value forKey:(NSString*)key;

- (void)setValue:(nullableid)value forKeyPath:(NSString*)keyPath;

读取私有成员:

- (nullableid)valueForKey:(NSString*)key;

- (nullableid)valueForKeyPath:(NSString*)keyPath;

其中KeyPath的方式是用来访问复合对象的方式:比如person类中有一个car类的对象,car有个成员是color,

keyPath需要写成person.car.color

方法2:

假如不知类有哪些属性,我们可以利用RunTime获取所有属性,不太熟悉RunTime的同学自行脑补

获取所有属性

unsignedint  numIvars =0;

Ivar* ivars =class_copyIvarList([aObjItem class], &numIvars);

然后:用循环找出你要的成员,假如第二个就是

    Ivar privateIvar = ivars[1];

    object_setIvar(aObjItem, privateNameIvar,@"456");

    NSString*privateName = object_getIvar(aObjItem, privateNameIvar);

这样就改变第二个成员的值了

注意:

object_setIvar,object_getIvar 第一个参数是实例对象,这里不要错,会崩溃的

在改变私有成员值之前的循环里面要找到对应成员名称,ivar_getName(privateIvar)

成员属性,这个怎么获取大家自己找找吧

你可能感兴趣的:(iOS 如何访问私有变量)