NSMutableDictionary简单细说(三)—— 新增键值对

版本记录

版本号 时间
V1.0 2017.08.28

前言

NSMutableDictionary是可变字典,相对NSDictionary来说,它是可变的,它的可变性可以参考NSMutableArray数组,但是它与数组还是有很大不同,尽管他们都属于集合类,下面这几篇我们继续来将一下基础类的知识。还是老规矩从整体到局部,从浅入深进行讲解,谢谢大家。感兴趣的可以参考我写的上篇几篇。
1. NSMutableDictionary简单细说(一)—— 整体了解
2. NSMutableDictionary简单细说(二)—— 创建和初始化

一、- (void)setObject:(ObjectType)anObject forKey:(id)aKey;

该方法的作用是:将给定的键值对加入到字典中。

下面看一下参数和返回值

  • anObject:aKey的值。 通过字典维护对象的强引用。如果anObject为零,则引发NSInvalidArgumentException异常。 如果您需要在字典中表示一个nil值,请使用NSNull
  • aKey:键对应的值。 键被复制(使用copyWithZone :键必须符合NSCopying协议)。 如果aKey已经存在于字典中,则anObject将占有这个键对应的值。如果key为空则会抛出NSInvalidArgumentException 异常。

看示例代码

- (void)demoSetObject
{
    NSMutableDictionary *dictM = [NSMutableDictionary dictionary];
    [dictM setObject:@"1" forKey:@"One"];
    NSLog(@"dictM = %@", dictM);
}

看输出结果

2017-08-28 23:05:58.680 JJOC[6185:156797] dictM = {
    One = 1;
}

结论:字典增加给定的一个键值对。


二、- (void)setObject:(ObjectType)obj forKeyedSubscript:(id)key;

该方法的作用:与方法一一样,都是在字典中加入给定的键值对。

看一下参数:

  • obj:aKey的值。 通过字典维护对象的强烈引用。传递nil将会使与aKey相对应的任何对象从字典中删除。
  • key:值的键。 键被复制(使用copyWithZone :,键必须符合NSCopying协议)。 如果aKey已经存在于字典中,则anObject将占有一席之地。如果aKey为零,则引发NSInvalidArgumentException异常。

还要注意:

  • 此方法与setObject:forKey:方法具有相同的行为。您不应该直接调用此方法。 而是使用下标设置键的对象时调用此方法。
id value = @"someValue";
mutableDictionary[@"someKey"] = value;

结论:与方法一作用相同,区别是这个不能显示的调用。


三、- (void)setValue:(ObjectType)value forKey:(NSString *)key;

该方法的作用就是:向字典中加入给定的键值对。

看一下参数:

  • value:键对应的值。
  • key:值对应的键。 请注意,使用键值编码时,键必须是字符串。

还要注意:

  • 此方法使用setObject:forKey :,将值和键添加到字典,除非值为nil,否则该方法会尝试使用removeObjectForKey:删除键。

看示例代码

- (void)demoSetValue
{
    NSMutableDictionary *dictM = [NSMutableDictionary dictionary];
    [dictM setValue:@"1" forKey:@"One"];
    NSLog(@"dictM = %@", dictM);
}

看输出结果

2017-08-28 23:18:54.180 JJOC[6504:167561] dictM = {
    One = 1;
}

结论:为字典加给定的键值对。


四、- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;

该方法的作用是:根据已知字典,生成新的字典。

要注意:

  • 来自otherDictionary的每个值对象在被添加到接收字典之前被发送一个保留消息。 相反,每个关键对象都被复制(使用copyWithZone:-keys必须符合NSCopying协议),并将该副本添加到接收字典中。
  • 如果两个字典都包含相同的密钥,则该密钥的接收字典的先前的值对象将被发送一个释放消息,并且新的值对象取而代之。

看示例代码

- (void)demoAddEntriesFromDictionary
{
    NSMutableDictionary *dictM = [NSMutableDictionary dictionary];
    [dictM setObject:@1 forKey:@"One"];
    [dictM setObject:@3 forKey:@"three"];
    NSDictionary *givenDict = @{@"One" : @100, @"Two" : @2, @"Three" : @3};
    [dictM addEntriesFromDictionary:givenDict];
     NSLog(@"dictM = %@", dictM);
}

看输出结果

2017-08-28 23:28:48.706 JJOC[6819:174851] dictM = {
    One = 100;
    Three = 3;
    Two = 2;
    three = 3;
}

结论:根据给定字典实例化新的可变字典。


五、- (void)setDictionary:(NSDictionary *)otherDictionary;

该方法作用是:将接收字典的内容设置为给定字典中的条目。

还要注意:

  • 所有条目从接收字典中删除(使用removeAllObjects),然后将来自otherDictionary的每个条目添加到接收字典中。

看实例代码

- (void)demoSetDictionary
{
    NSMutableDictionary *dictM = [NSMutableDictionary dictionary];
    [dictM setObject:@1 forKey:@"One"];
    [dictM setObject:@3 forKey:@"three"];
    NSDictionary *givenDict = @{@"One" : @100, @"Two" : @2, @"Three" : @3};
    [dictM setDictionary:givenDict];
    NSLog(@"dictM = %@", dictM);
}

看输出结果

2017-08-28 23:32:46.023 JJOC[6991:178818] dictM = {
    One = 100;
    Three = 3;
    Two = 2;
}

结论:根据给定字典实例化新的字典。

后记

未完,待续~~~

NSMutableDictionary简单细说(三)—— 新增键值对_第1张图片

你可能感兴趣的:(NSMutableDictionary简单细说(三)—— 新增键值对)