Runtime访问私有变量和方法及KVO访问

一、Class

在之前的文章中我们提到,所有的对象都有个isa指针指向它对应的类Class,而Class是一个objc_class结构体,结构体中:

  • 实例变量列表objc_ivar_list
  • 方法列表objc_method_list
    对应的runtime获取方法:
Ivar *class_copyIvarList(Class cls, unsigned int *outCount)
Method *class_copyMethodList(Class cls, unsigned int *outCount)  

首先我们先创建一个Test类:

//
//  Test.h
//  RuntimeKVC
//
//  Created by z on 2019/5/24.
//  Copyright © 2019年 com.jzsec. All rights reserved.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface Test : NSObject
{
    @public
    NSString *name;
    
    /* 头文件中定义私有变量,默认为@protected */
    @private
    NSString *major;
}

@property (nonatomic, strong) Test *childTest;

@end

NS_ASSUME_NONNULL_END
//
//  Test.m
//  RuntimeKVC
//
//  Created by z on 2019/5/24.
//  Copyright © 2019年 com.jzsec. All rights reserved.
//

#import "Test.h"

@interface Test ()
{
    /* 类扩展区域定义私有变量,默认j就是@private */
    int age;
}

/* 类扩展区域定义私有属性 */
@property (nonatomic, copy) NSString *job;

/* 类扩展区域定义私有变量,默认j就是@private */
- (void)test;

@end

@implementation Test

-(void)test
{
    NSLog(@"这是个私有实例方法");
}

@end
二、Runtime访问

runtime暴力访问私有属性、私有变量和私

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值