是 - [NSDictionary setObject:nil forKey:]与 - [NSDictionary removeObjectForKey:]相同?

时间:2014-10-30 01:48:34

标签: ios objective-c nsdictionary

我正在阅读一些源代码,并注意到以下API,如果开发人员希望删除对象,则会在nil中传递。

- (void)setSomeStatus:(SomeStatusObject *)status {
    if (status != nil) {
        [store setObject:status forKey:SOME_STATUS_KEY];
    } else {
        [store removeObjectForKey:SOME_STATUS_KEY];
    }
}

我的具体问题是,如果上述内容可以缩减为

- (void)setSomeStatus:(SomeStatusObject *)status {
    [store setObject:status forKey:SOME_STATUS_KEY];
}

或者

- (void)setSomeStatus:(SomeStatusObject *)status {
    store[SOME_STATUS_KEY] = status;
}

2 个答案:

答案 0 :(得分:1)

不,他们不等同。实际上,将nil传递给setObject:forKey:(值或键)将导致运行时异常。

答案 1 :(得分:0)

您无法使用nil将值设置为setObject:forKey

NSDictionary想要一个对象,即使该对象代表NULL,并且单独的值也不能设置为nil。 (你可以将其设置为NSNULL

因此,要回答您的问题,您的代码无法替换现有代码。