setValue:forKey:与setObject:forKey:的区别

来源:互联网 发布:淘宝店子账号怎么登陆 编辑:程序博客网 时间:2024/05/24 15:35

// 苹果官方文档是这么解释的/* Send -setObject:forKey: to the receiver, unless the value is nil, in which case send -removeObjectForKey:.*/- (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;- (void)setObject:(ObjectType)anObject forKey:(KeyType <NSCopying>)aKey;

什么意思呢?

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 的属性赋值


阅读全文
0 0
原创粉丝点击