2016-07-06 65 views
-6

有沒有通過這種方式初始化一個NSDictionary之間的任何差別:初始化一個NSDictionary

self.myData = [[NSDictionary alloc] init]; 
[self.myData initWithObjects:objects forKeys:keys]; 

或者這樣說:

self.myData = [[NSDictionary alloc] initWithObjects:objects forKeys:keys]; 

因爲我問這個問題的原因是第一位的是不工作。我很新奇,想知道爲什麼?

這裏是我的代碼: -

enter image description here

+2

請將代碼改爲鏈接到png – lubilis

+1

這是因爲您正在分配和初始化字典兩次。分配一次,然後設置它的鍵和值(添加對象)。在你的第二種方式中,你正在分配和初始化一個對象,並設置對象,這樣它就可以工作了! – Lion

+0

明白了。謝謝你的幫助。 @Lion – dreamBegin

回答

4

第一個版本調用init兩次,這是一個非常非常糟糕的事情在大多數情況下是這樣做的,但對於像NSDictionary這樣的內置類尤其糟糕。我從來沒有試過這個,但它應該崩潰,因爲你初始化一個不可變的字典,第二次嘗試初始化將修改它。

+0

我不同意這種說法,「第二次嘗試初始化會修改它」,因爲涉及'alloc' /'init'時可變性不是問題。我不明白爲什麼它被接受爲*答案,但我期望這是因爲回答者的數量。 – Droppy

+0

是的,現在我完全理解了這個概念。 – dreamBegin

+0

你有更好的解決方案兄弟嗎? @Droppy – dreamBegin

3

可以初始化你的字典中是這樣的:

self.myData = @{ @"key1" : object1, 
       @"key2" : object2 
       // etc. 
       }; 
+0

你是對的,但那不是我問的是。 – dreamBegin