美文网首页IOS三人行
iOS Dictionary setObject:forKey

iOS Dictionary setObject:forKey

作者: 面试小集 | 来源:发表于2016-05-14 22:52 被阅读1064次

    在使用NSMutableDictionary的时候经常会使用setValue forKey与setObject forKey,他们经常是可以交互使用的,代码中经常每一种的使用都有。

    setValue:forKey:

    /* 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:forKey: value不为nil的时候调用setObject:forKey: ,value为nil的时候调用 -removeObjectForKey。

    setObject:forKey:

    @interface NSMutableDictionary :NSDictionary
    - (void)removeObjectForKey:(id)aKey;
    - (void)setObject:(id)anObject forKey:(id <NSCopying>)aKey;
    @end
    

    setObject:forKey:中Key的对象是一个id类型

    区别

    1, setObject:forkey:中value是不能够为nil的,不然会报错。Xcode中如果value为nil会提示警告,运行会报错。
    所以,代码中能用setValue:forKey:的尽量用setValue:forKey:

    警告

    2, setValue:forKey:中key的参数只能够是NSString类型,而setObject:forKey:的可以是任何类型。

    其他

    1. [NSNull null]表示的是一个空对象,并不是nil。

    2. 当 setValue:forKey:方法调用者是对象的时候:
      setValue:forKey:方法是在NSObject对象中创建的,也就是说所有的oc对象都有这个方法,所以可以用于任何类。
      比如使用:
      SomeClass *someObj = [[SomeClass alloc] init];
      [someObj setValue:self forKey:@"delegate"];
      表示的意思是:对象someObj设置他的属性的值为当前类,当然调用此方法的对象必须要有delegate属性才能设置,不然调用了也没效果。

    总结

    [obj setValue:@"xxx" forKey:@"xxx"]的用法实际上就是KVC,ios很多时候的名字叫起来很高大上,实际上这都是其它语言里一些很平常的东西。
    在正常网络请求传参的时候,一般情况下,建议用setValue, 比setObject要稳健。

    相关文章

      网友评论

        本文标题:iOS Dictionary setObject:forKey

        本文链接:https://www.haomeiwen.com/subject/zrhvrttx.html