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却可以是任何类型
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却可以是任何类型
相关文章推荐
- iOS中setValue和setObject的区别详解
- iOS开发中setValue和setObject的区别
- IOS [转]setValue和setObject的区别
- iOS开发 setValue和setObject的区别
- iOS字典 setValue 和 setObject的区别
- setValue和setObject的区别
- [iOS]详解枚举NS_ENUM与NS_OPTIONS的区别与说明
- NSMutableDicitionary 的setValue和setObject的区别
- setValue和setObject的区别
- setValue和setObject的区别
- setValue和setObject的区别
- setValue和setObject的区别
- setValue和setObject的区别
- setValue和setObject的区别
- iOS setValue和setObject的区别
- SetValue:forKey和SetObject:forKey的区别
- iOS中NSString 使用 copy 和 strong 修饰的区别详解
- setValue和setObject的区别
- iOS property中的strong 、weak、copy 、assign 、retain 、unsafe_unretained 与autoreleasing区别和作用详解
- setValue 和 setObject 的区别