美文网首页
2018-05-05 Objective-C中的diction

2018-05-05 Objective-C中的diction

作者: SnailLi | 来源:发表于2018-05-05 17:10 被阅读17次

    今天看到一道这样的面试题:
    能准确删除“张三”的代码是:NSMutableDictionary * dic =[NSMutableDictionary dictionaryWithObjectsAndKeys:@"张三",@"左护法", nil];

    A. [dic removeObjectForKey:@"左护法"];

    B. [dic removeObject:@"张三"];

    C. [dic removeObjectAtIndex:0];

    D. [dic removeAllObjects];

    正确的答案是A,

    dictionaryWithObjectsAndKeys:方法的功能是创建字典,此字典具有多个值和多个键。与dictionaryWithObjects:唯一不同的是,这多个值和键没用放在数组中,而是直接进行了使用。
    我们查看了他的语法:+ (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ... NS_REQUIRES_NIL_TERMINATION NS_SWIFT_UNAVAILABLE("Use dictionary literals instead");
    其中,(id)firstObject用来指定值和键,首位为值,第二位为键,第三位又为值,以此类推。

    值得注意的是:dictionaryWithObjectsAndKeys方法在遇到nil对象时,会以为是最终的结束标志。于是在初始化NSMutableDictionary的时候遇到有nil对象就会结束初始化了,而且不管编译和运行中都不会报错,这样的bug显然很隐蔽。
    例如:
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:value1, @"key1", value2, @"key2", value3, @"key3", nil];
    可能会发现 dict 中没有3个key-value对,原因是 dictionaryWithObjectsAndKeys 遇到 object 为 nil 时结束。
    解决方式是在 object 可能为 nil 下, 使用 setObject:forKey:
    1NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:10];
    [dict setObject:value1 forKey:@"key1"];
    [dict setObject:value2 forKey:@"key2"];
    [dict setObject:value3 forKey:@"key3"];

    相关文章

      网友评论

          本文标题:2018-05-05 Objective-C中的diction

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