2014-10-30 84 views
-2

我正在阅读一些源代码,并且我注意到了以下API,如果开发人员想要移除对象,那么开发人员会通过nil是 - [NSDictionary setObject:nil forKey:]相同 - [NSDictionary removeObjectForKey:]?

- (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; 
} 
+0

你为什么不试试看?或者甚至只是引用NSMutableDictionary文档,看看它说什么试图将字典放入零字典 – Paulw11 2014-10-30 02:00:11

+0

是的,为什么不阅读最优秀的文档? – 2014-10-30 02:34:13

+0

老实说不能为这个ha做个借口 – JuJoDi 2014-10-30 02:35:36

回答

1

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

0

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

NSDictionary需要一个对象,即使该对象表示为NULL,并且该值本身也不能简单地设置为nil。 (但您可以将其设置为NSNULL)。

所以要回答你的问题,你的代码不能取代现有的。

+0

'setObject:forKey:'的文档明确指出,传递'nil'作为对象会导致运行时异常。 – rmaddy 2014-10-30 02:02:53

+0

道歉@rmaddy。我更正了 – CaptJak 2014-10-30 02:03:43

+0

你的第一句话仍然指出你使用'setObject:forKey:'为'nil'吃了一个值。你不能。 – rmaddy 2014-10-30 02:04:29