iOS setObject与setValue的区别详解

在我们平时的编程经历中用了许多的setObject:forKey: 与setValue: forKey。平时用的时候一般不会注意这两个方法有什么区别,有什么共同点,下边来look look。

1.在Xcode中cmd点进去看官方定义,可以发现,两个方法还是有联系和细微区别的,

  • - (void)setObject:(ObjectType)anObject forKey:(KeyType <NSCopying>)aKey;

      可以发现setObject:是set了一个对象类型的数据。

  • @interface NSMutableDictionary<KeyType, ObjectType>(NSKeyValueCoding)

        /* Send -setObject:forKey: to the receiver, unless the value is nil, in which case send -removeObjectForKey:.*/

        - (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;

      setValue相当于扩展了一个NSMUtableDictionary的一个类别,注释的意思是发送setObject给接收者,调用的也是setObject:forkey方法。但是当这个value为nil的时候,则自动调用removeObject:forkey

2.再说说他们的区别

  • setObject是NSMutableDictionary独有的方法,setValue则是KVC的主要方法。并且setValue的调用对象可以是任何类,以此来处理自身的属性。
  • 如果setObject:nil,这样会会直接crash崩溃;但是setvalue的时候,如果为nil,系统会自动调用removeObject:forKey方法,就没这个问题了,但是不好检测。

PS:如果setObject:[NSNull null] forKey。这样是没问题的,因为[NSNull null]是一个对象

       setValue只能set一个NSString类型的数据,但是setObject却可以是任何类型


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值