setValue和setObject的区别

大家在使用NSMutableDictionary经常会使用setValue: forKey:setObject: forKey:,这两个方法经常是交替使用的,代码中其实两个方法都有使用

1.1 setValue: forKey:的定义

官方文档解释:
在这里插入图片描述

官方文档描述:该方法增加一个value和key会调用setObject: forKey:方法,除非当value=nil的时候,会调用removeObjectForKey:方法

1.2setObject: forKey:的定义

在这里插入图片描述

  • 注意:
    • object参数不能为nil,如果为nil,会抛出一个NSInvalidArgumentException异常,如果你需要设置object为nil对象的话, 请使用NSNull对象 设置一个空对象进去是可以的 (NSNull对象和nil是不一样的
    • aKey参数也是不可以为nil的,并且aKey必须实现NSCopying协议,如果key是nil,也会抛出 NSInvalidArgumentException异常(该方法中的key是id<NSCopying>类型的,只要在遵守NSCopying协议的对象都可以,只是我们经常习惯使用NSString

1.3 区别

  • setObject: forkey:object 是不能够为 nil 的,不然会报错。
    setValue: forKey:value 能够为 nil,但是当 valuenil 的时候,会自动调用 removeObject: forKey:方法
  • setValue: forKey:key 的参数只能够是 NSString 类型,而
    setObject: forkey: 中的 key 可以是任何类型

1.4 注意

  • setObject: forkey:NSMutableDictionary的特有方法
  • setValue: forKey:是方法是 KVC(键-值编码)的主要方法
  • setValue: forKey: 方法调用者是对象的时候:
  • setValue: forKey: 方法是在 NSObject 对象中创建的,也就是说所有的 oc 对象都有这个方法,所以可以用于任何类。比如使用:
SomeClass *someObj = [[SomeClass alloc] init];
[someObj setValue:self forKey:@"delegate"];

表示的意思是:对象 someObj 设置它的 delegate 属性的值为当前类,当然调用此方法的对象必须要有 delegate 属性才能设置,不然调用了也没效果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值