1. setValue:forKey: 要求传一个nullabel的value, 就是可以为nil;
上面也注释了,本质上也是调用 setObject:forKey: 但如果传的value是nil,就会移除这个key,对于可变字典这个机制叫做字典的有值添加;
2. setObject:forKey: 一般没有写nullabel 的,都是不可为空的,传入nil就会崩
为什么呢 你看文档中类的开头和结尾 NONNULL, 说的很清楚
NS_ASSUME_NONNULL_BEGIN
NS_ASSUME_NONNULL_END
3. setValue:forKeyPath: AND setObject:forKeyPath:
和上面那对方法类似,第一个参数意思一样,第二个更为精确;
举个栗子
[textField setValue:[UIColor blackColor] forKey:@"textColor"];
[textField setValue:[UIColor lightGrayColor] forKeyPath:@"_placeholderLabel.textColor"];
forKeyPath 可以通过点语法,给更深层的属性赋值
顺便说一下,KVC可以给readOnly 的属性赋值