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

ios 如何访问私有变量

作者: 赵哥窟 | 来源:发表于2018-08-31 13:59 被阅读75次

写一个TestObject类 代码如下
TestObject.h

#import <Foundation/Foundation.h>

@interface TestObject : NSObject

@property (copy, nonatomic) NSString *name;
@property (copy, nonatomic) NSString *sex;

@end

TestObject.m

#import "TestObject.h"
#import <objc/runtime.h>

@interface TestObject()

@property (copy, nonatomic) NSString *privateName;
@property (copy, nonatomic) NSString *privateSex;

@end

@implementation TestObject


@end

方式一 使用KVC方式

    TestObject *obj = [TestObject new];
    [obj getIvars];
    
    [obj setValue:@"123" forKey:@"privateName"];
    NSLog(@"privateName:%@", [obj valueForKey:@"privateName"]);

方式二:
假如我们不知TestObject有哪些属性,所以我们可以利用RunTime获取所有属性

- (void)getIvars
{
    unsigned int count = 0;
    // 拷贝出所胡的成员变量列表
    Ivar *ivars = class_copyIvarList([self class], &count);
    
    for (int i = 0; i<count; i++) {
        // 取出成员变量
        Ivar ivar = ivars[i];
        // 打印成员变量名字
        NSLog(@"%s---", ivar_getName(ivar));
        // 打印成员变量的数据类型
        NSLog(@"%s---", ivar_getTypeEncoding(ivar));
        NSLog(@"---------------------------------------");
    }
    // 释放
    free(ivars);
}

假如我们要访问privateName属性,代码如下

   unsigned int count = 0;
    Ivar *ivars = class_copyIvarList([TestObject class], &count);
    //对私有变量的更改
    Ivar privateNameIvar = ivars[2];
    object_setIvar(obj, privateNameIvar, @"456");
    NSString *privateName = object_getIvar(obj, privateNameIvar);
    NSLog(@"privateName : %@",privateName);

Demo:https://github.com/destinyzhao/GetAttributesAndMethod

相关文章

  • 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/eqmswftx.html