2014-10-30 85 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