iOS字典 setValue 和 setObject的区别

Posted 建古

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS字典 setValue 和 setObject的区别相关的知识,希望对你有一定的参考价值。

实例说明

NSString name = @"张三";
NSString name1 = nil;

NSMutableDictionary *paramters = [[NSMutableDictionary alloc] init];
[paramters setObject:name forKey:@"userName"]; // 不会奔溃

NSMutableDictionary *paramters1 = [[NSMutableDictionary alloc] init];
[paramters setObject:name1 forKey:@"userName"]; // 奔溃

setObejct的value不能为nil

所以在项目中  传参数的时候 有时候会因为值为nil而奔溃,相信都有遇到过吧。 如果使用setObject 一定要保证value不能为nil

如果要value为nil 但又不会让其奔溃怎么办,那就要使用setValue
NSMutableDictionary *paramters2 = [[NSMutableDictionary alloc] init];
[paramters setValue:name forKey:@"userName"]; // 不会奔溃

NSMutableDictionary *paramters3 = [[NSMutableDictionary alloc] init];
[paramters setValue:name1 forKey:@"userName"]; // 不会奔溃
如果使用setValue 当value为nil的时候 会自己调用 下面这个方法
- (void)setValue:(id)value forUndefinedKey:(NSString *)key




小小知识点,但在项目中随处可见,不建议说哪个好!但自己····因为也是我在项目中遇到的坑··

以上是关于iOS字典 setValue 和 setObject的区别的主要内容,如果未能解决你的问题,请参考以下文章

为啥在可变字典上调用的 setValue:forKeyPath 不会为未知键路径抛出异常?

iOS setValue和setObject的区别

iOS 仪器自动化“setValue”不起作用

iOS9:替代 UIDevice.currentDevice().setValue(...) 强制方向

Swift iOS NSDictionary setValue 崩溃 - 但为啥?

iOS -- 给model赋值时走了[self setValuesForKeysWithDictionary:dic]不走setvalue: forked: