在下对于访问一个对象的私有变量或者是对象的父类的私有变量给出了两种不同的方式。通过KVC和runtime的方式,此篇文章先叙述KVO的方式,下篇文章会用runtime的方式。若有其他方式,还望各位多多指教。
以下代码中是访问WYPerson对象父类的私有属性name和WYPerson的私有属性age。
运用场景:需要读写继承三方框架中的某个类中的私有属性。
示例代码如下:
********************Person.h**********************
#import
@interface Person : NSObject
@end
********************Person.m**********************
#import "Person.h"
@interface Person ()
@property (nonatomic, copy) NSString *name; // 通过KVC在外界访问此私有属性
@end
@implementation Person
@end
*****************************WYPerson.h***********************
#import "Person.h"
@interface WYPerson :Person
@end
*******************************person.m*********************
#import "WYPerson.h"
@interface WYPerson ()
@property (nonatomic, assign) NSInteger age; // 通过KVC在外界访问此私有属性
@end
@implementation WYPerson
@end
************************************
- (void)viewDidLoad {
[super viewDidLoad];
WYPerson*person = [[WYPerson alloc] init];
[person setValue:@"wy"forKey:@"_name"];
NSLog(@"%@", [person valueForKey:@"_name"]);
[person setValue:@22forKey:@"age"];
NSLog(@"%@", [person valueForKey:@"age"]);
}
2018-04-11 10:45:33.521768+0800 KVC访问私有属性[68571:3308520] wy
2018-04-11 10:45:33.522217+0800 KVC访问私有属性[68571:3308520] wwyy
2018-04-11 10:45:33.522355+0800 KVC访问私有属性[68571:3308520] 22