美文网首页iOS Developer
使用KVC时小心这个小坑

使用KVC时小心这个小坑

作者: 大脸猫l | 来源:发表于2017-02-20 22:07 被阅读0次

一般在项目中,是很少使用KVC来访问属性的,今天手贱,想玩玩KVC,于是写了下面一段代码

TestViewController *VC = [[TestViewController alloc] init];
//nextTextField是IBOutlet关联出来的
[VC setValue:@"a" forKeyPath:@"nextTextField.text"];
[self presentViewController:VC animated:YES completion:^{
    
}];

乍一看,没什么问题,但是运行后,跳转到下个控制器时,nextTextField是空的,稍加思考一下,应该是view还没加载出来,此时VC去访问nextTextField,nextTextField是nil

于是我把代码改成下面这个样子,就好了

TestViewController *VC = [[TestViewController alloc] init];
VC.view.backgroundColor = [UIColor grayColor];
[VC setValue:@"a" forKeyPath:@"nextTextField.text"];
[self presentViewController:VC animated:YES completion:^{
    
}];

运行完VC.view,view加载出来,nextTextField就有了

接着,我在TestViewController中的viewDidLoad方法内重新给VC设置新的颜色

self.view.backgroundColor = [UIColor greenColor];

发现还是上面的grayColor,到这就可以断定,view的加载方式是懒加载,也就是说执行到VC.view时,先懒加载view,同时执行viewDidLoad方法,先给VC设置greenColor,等

VC.view.backgroundColor = [UIColor grayColor];

执行完又被改成了grayColor

当然,即使不用KVC,使用属性传值也是如此

TestViewController *VC = [[TestViewController alloc] init];
VC.view.backgroundColor = [UIColor grayColor];
VC.name = @"abc";
[self presentViewController:VC animated:YES completion:^{
    
}];

TestViewController中如是

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor greenColor];
    _nextTextField.text = _name;
}

nextTextField是不会被赋值的,因为执行完

VC.view.backgroundColor = [UIColor grayColor];

viewDidLoad方法已经执行

相关文章

  • 使用KVC时小心这个小坑

    一般在项目中,是很少使用KVC来访问属性的,今天手贱,想玩玩KVC,于是写了下面一段代码 乍一看,没什么问题,但是...

  • KVC详解

    KVC 目录结构KVC定义KVC取值和设置KVC使用keyPathKVC处理字典KVC作用 参考:iOS KVC和...

  • 4.3 KVC/KVO —— KVC的实现原理,如何避免产生崩

    ?xml version="1.0" encoding="UTF-8"? KVC中最常见的异常就是不小心使用了错误...

  • 急用钱时,小心踩了这个坑

    上个月一朋友生病需要紧急手术,因为手头暂时没有太多钱做医药费,只能先四处拼凑,前几天出院了几个朋友一起下午茶,聊到...

  • iOS原理篇(二): KVC实现原理

    KVC实现原理 什么是 KVC KVC基本使用 KVC 原理 总结 一 、 什么是KVC KVC的全称是Key-V...

  • KVC使用小例子

    实例介绍 创建一个学生对象和一个课程对象,演示: 1、KVC基本使用 2、键路径取值使用场景 3、自动封装基本数据...

  • Swift4.0--用@objcMembers填平的辣些坑

    KVC 在Swift4.0版本中,使用KVC的setValuesForKeys()方法进行赋值时,每次都会崩在se...

  • 数据存储

    1.1.3.使用通知传值 1.2.Segue使用 2. KVC&&KVO2.1.什么是KVC KVC - Key ...

  • OC语法:KVC的底层实现

    一、KVC是什么二、怎么使用KVC三、KVC的底层实现四、KVC常见面试题 一、KVC是什么 KVC全称Key-V...

  • KVC

    方法交换 KVC的使用 KVC的原理 KVC自定义 参考资料 DIS_KVC_KVO[https://github...

网友评论

    本文标题:使用KVC时小心这个小坑

    本文链接:https://www.haomeiwen.com/subject/qxxywttx.html