2016-07-06 9 views
-6

を初期化すると、この方法によって、NSDictionaryのを初期化する間に違いはあります:はNSDictionaryの

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

またはこのよう:

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

私はこの質問を求めている理由は、最初の1つであるためています働いていない。私はなぜ新しいことを知りたいのですか?

ここに私のコードです: -

enter image description here

+2

pngにリンクする代わりにコードを投稿してください – lubilis

+1

これは、辞書を2回割り当てて初期化しているためです。それを一度割り当てて、キーと値を設定します(オブジェクトを追加する)。 2番目の方法では、オブジェクトを割り当てて初期化し、それを使ってオブジェクトを設定しています。 – Lion

+0

入手しました。ご協力いただきありがとうございます。 @Lion – dreamBegin

答えて

4

最初のバージョンの呼び出しはに非常に、非常に悪いことである、二回initのほとんどの場合ですが、特にNSDictionaryなどの組み込みクラスの場合は悪いです。私はこれを試したことはありませんが、が不変の辞書を初期化したためにクラッシュしなければなりません。

+0

私は、 '' alloc'/'init'が関わっているときは、mutabilityは問題ではないので、"と初期化する2回目の試みはそれを変更しようとする "というステートメントに同意しません。私はなぜそれが*答えとして受け入れられたのかわかりませんが、答弁者の人数のためにそれが期待されます。 – Droppy

+0

はい、今私は全くの概念を理解しています。 – dreamBegin

+0

あなたはより良い解決の兄弟を持っていましたか? @Droppy – dreamBegin

3

あなたはこの方法であなたの辞書を初期化することができます。

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

あなたは正しいですが、私が求めているものではありません。 – dreamBegin