美文网首页
iOS 如何访问私有变量

iOS 如何访问私有变量

作者: 石弓山长 | 来源:发表于2019-04-17 16:33 被阅读0次

方法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 如何访问私有变量

    写一个TestObject类 代码如下TestObject.h TestObject.m 方式一 使用KVC方式 ...

  • iOS 如何访问私有变量

    方法1: 如果你能看到类的实现以及私有成员,可以使用kvc 设置私有成员: - (void)setValue:(n...

  • [iOS]访问私有变量

    访问对象私有变量的方法有两中 KVC 和 Runtime机制 今天主要说一下KVC吧,runtime有时间单独...

  • ios 访问或修改私有变量的方式

    iOS中私有变量之说,是不绝对的,没有绝对的私有变量。有时候我们需要访问在.m文件中声明的属性变量或者在.h文件中...

  • 一文搞懂单例模式

    一、 预备知识 首先解决一个问题“如何访问私有静态成员变量” 定义并初始化私有静态成员变量x 在main函数中...

  • 私有变量访问

    如果将# print(Student.__name) 注释拿掉 运行会报错,因为私有变量不能直接访问报错如下 打印...

  • 7.4私有变量

    任何函数中定义的变量,都可以认为是私有变量,因为不能在外部访问访问这些变量。私有变量包括函数的参数,局部变量,和在...

  • iOS面试题收集(一)

    如何访问并修改一个类的私有属性? 1.通过KVC获取2.通过runtime访问并修改私有属性 iOS 的沙盒目录结...

  • JavaScript函数表达式——私有变量

    私有变量 任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量,私有变量包括函数的参数,...

  • Web36.this_原型链_继承

    三种变量 实例变量: (this)类的实例产能访问到的变量静态变量: (属性)直接类型对象能访问到的变量私有变量:...

网友评论

      本文标题:iOS 如何访问私有变量

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