我们通过kcv可访问父类的任何私有的保护的共有的成员变量 包括其他类的私有变量系统私有变量都可通过kvc获取
extension和implement中定义的私有
Father类
//.h
@interface Father : NSObject {
@private
NSInteger abc;
}
@property (nonatomic, strong) NSString *songOne;
- (void)printVar;
@end
//.m
@interface Father () {
@private
int privateVar;
@protected
int protectedVar;
@public
int publicVar;
}
@property (nonatomic, strong) NSString *song;
@end
@implementation Father {
NSInteger fAbc;
}
- (void)printVar
{
NSLog(@"father abc:%@", [self valueForKey:@"abc"]);
NSLog(@"father song:%@", [self valueForKey:@"song"]);
NSLog(@"father songOne:%@", [self valueForKey:@"songOne"]);
NSLog(@"father privateVar:%@", [self valueForKey:@"privateVar"]);
NSLog(@"father protectedVar:%@", [self valueForKey:@"protectedVar"]);
NSLog(@"father publicVar:%@\n\n", [self valueForKey:@"publicVar"]);
NSLog(@"father fABC:%@", [self valueForKey:@"fAbc"]);
}
@end
son类
//.h
@interface Son : Father
- (void)printPrivate;
@end
//.m
@implementation Son
- (instancetype)init
{
if (self = [super init]) {
}
return self;
}
- (void)printPrivate
{
NSLog(@"son abc:%@", [self valueForKey:@"abc"]);
NSLog(@"son song:%@", [self valueForKey:@"song"]);
NSLog(@"son songOne:%@", [self valueForKey:@"songOne"]);
NSLog(@"son privateVar:%@", [self valueForKey:@"privateVar"]);
NSLog(@"son protectedVar:%@", [self valueForKey:@"protectedVar"]);
NSLog(@"son publicVar:%@", [self valueForKey:@"publicVar"]);
NSLog(@"son fABC:%@", [self valueForKey:@"fAbc"]);
}
@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
在实例化对象中通过KVC访问:
Father *father = [[Father alloc] init];
[father setValue:@"120" forKey:@"abc"];
[father setValue:@"123" forKey:@"songOne"];
[father setValue:@"456" forKey:@"song"];
[father setValue:@"12" forKey:@"privateVar"];
[father setValue:@"34" forKey:@"protectedVar"];
[father setValue:@"56" forKey:@"publicVar"];
[father setValue:@123456 forKey:@"fAbc"];
[father printVar];
Son *son = [Son new];
[son setValue:@"121" forKey:@"abc"];
[son setValue:@"1234" forKey:@"songOne"];
[son setValue:@"567" forKey:@"song"];
[son setValue:@"123" forKey:@"privateVar"];
[son setValue:@"456" forKey:@"protectedVar"];
[son setValue:@"789" forKey:@"publicVar"];
[son setValue:@1234567 forKey:@"fAbc"];
[son printPrivate];
通过KVC的方式不管是私有的、保护的和公有的,都能进行访问。