版本记录
版本号 | 时间 |
---|---|
V1.0 | 2017.08.28 |
前言
NSMutableDictionary
是可变字典,相对NSDictionary
来说,它是可变的,它的可变性可以参考NSMutableArray
数组,但是它与数组还是有很大不同,尽管他们都属于集合类,下面这几篇我们继续来将一下基础类的知识。还是老规矩从整体到局部,从浅入深进行讲解,谢谢大家。感兴趣的可以参考我写的上篇几篇。
1. NSMutableDictionary简单细说(一)—— 整体了解
2. NSMutableDictionary简单细说(二)—— 创建和初始化
一、- (void)setObject:(ObjectType)anObject forKey:(id<NSCopying>)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<NSCopying>)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<KeyType,ObjectType> *)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<KeyType,ObjectType> *)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;
}
结论:根据给定字典实例化新的字典。
后记
未完,待续~~~