将来跳槽用麦子面试题精选转载

iOS面试题:KVC的赋值和取值过程是怎样的?KVO原理是什么?

2019-04-24  本文已影响206人  iOS猿_员

更多:iOS面试题大全

1、KVC赋值

// 1.1 创建人
PTLPerson *p = [[PTLPerson alloc] init];
self.person = p;
// 1.2 创建狗
PTLDog *dog = [[PTLDog alloc] init];
// 1.3 将狗赋值给人
[p setValue:dog forKeyPath:@"dog"];
// 1.4 通过KVC给dog的weight属性赋值 
赋值时会自动找到人拥有的dog的weight属性
[p setValue:@10.0 forKeyPath:@"dog.weight"];
NSLog(@"books = %@", [p valueForKeyPath:@"dog.weight"]);
[dog print];

2、 KVC取值

NSMutableArray *tempM = [NSMutableArray array];
// 2.1 kvc取出出数组books中price的值
for (PTLBook *book in [p valueForKeyPath:@"books"]) {
    [tempM addObject:[book valueForKeyPath:@"price"]];
}
NSLog(@"%@", tempM);
// 2.2 kvc取出数组中price的最大值
NSLog(@"Max = %@", [[p valueForKeyPath:@"books"] valueForKeyPath:@"@max.price"]);

3、 KVO原理

-(void)setName:(NSString *)newName 
{ 
[self willChangeValueForKey:@"name"]; //KVO在调用存取方法之前总调用 
[super setValue:newName forKey:@"name"]; //调用父类的存取方法 
[self didChangeValueForKey:@"name"]; //KVO在调用存取方法之后总调用 
} 

更多:iOS面试题大全

上一篇 下一篇

猜你喜欢

热点阅读