您的位置:首页 > 移动开发 > Objective-C

iOS setObject与setValue的区别详解

2018-03-15 16:39 399 查看
在我们平时的编程经历中用了许多的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却可以是任何类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息