setObject:forKey:
@interface NSMutableDictionary<KeyType, ObjectType> : NSDictionary<KeyType, ObjectType>
- (void)removeObjectForKey:(KeyType)aKey;
- (void)setObject:(ObjectType)anObject forKey:(KeyType <NSCopying>)aKey;
@end
- setObject: forKey
的第一个参数 anObject
使用 ObjectType
修饰,其本质(nonnull ObjectType
) 默认类型是 nonnull
表示不能为空,如果是空便会崩溃。
anObject
是aKey
的值,dictionary
强引用该对象。如果anObject
是nil
,会引发NSInvalidArgumentException
的异常,如果你想传一个空值在dictionary
中,可以使用NSNull
代表空值。
setValue:forKey:
@interface NSMutableDictionary<KeyType, ObjectType>(NSKeyValueCoding)
/* Send -setObject:forKey: to the receiver, unless the value is nil, in which case send -removeObjectForKey:.
*/
- (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;
@end
- setValue: forKey
的第一个参数value
使用nullable ObjectType
修饰,表示可以为空。如果是空的话,便会执行-removeObjectForKey
。
setObject:forKeyedSubscript:
- (void)setObject:(ObjectType)obj forKeyedSubscript:(id<NSCopying>)key;
object
是aKey
的值,dictionary
强引用该对象。如果object
为nil
,dictionary
会将aKey
的关联的object
移除。object
为nil
,dictionary
会将aKey
的关联的object
移除。
NSMutableDictionary *dictM = [[NSMutableDictionary alloc] init];
dictM[@"name"] = @"Tom"; //@{@"name":@"Tom"}
dictM[@"name"] = nil; //@{}
dictM[@"name"] = @"Tom"
字面量赋值 和 [mutableDictionary setObject:@"Tom" forKeyedSubscript:@"name"]
是等效的;
特别提醒: 这里的“空”是指 NULL、 Nil、 nil,而[NSNull null] 是指空的对象,其是非空的。
网友评论