setObjectForKey和setValueForKey的用法和区别

       首先,setValue:forKey 会调用 setObejct:forKey: ,但有一个例外就是当 setObejct:forKey: 的value为nil的时候,会去调用 removeObjectForKey: ,也就是说会删除该key对应的value,

setObject:forKey 这货的key只要不是nil就行,存储在dict里的只是对象的引用。

setValue:forKey这货的key必须是string,看样子dict会复制整个value保存起来。

两者的区别:
(1)setObject:forkey:中value是不能够为nil的;setValue:forKey:中value能够为nil,但是当value为nil的时候,会自动调用removeObject:forKey方法
(2)setValue:forKey:中key只能够是NSString类型,而setObject:forKey:的可以是任何类型
(3) setObject:forkey:中value是不能够为nil的,不然会报错。
objectForKey: 和 valueForKey: 在多数情况下都是一样的结果返回,但是如果 key 是以 @ 开头,valueForKey: 就成了一个大坑,建议在 NSDictionary 下只用 objectForKey: 来取值。

你可能感兴趣的:(setObjectForKey和setValueForKey的用法和区别)