1

objectA で NSMutableDictionary(dictA) を作成しようとしています。辞書 (NSLog) を表示しようとすると、各キーが同じアドレスを指しています。タイプ objectA であり、辞書のセットアップに使用される objectA_1 があります。また、getObject を実行しようとすると、ディクショナリに追加された最後のキー/値が常に取得されます。setValue を試してみましたが、同じ結果が得られました。objectA に何か問題がありますか? 解除方法が間違っていませんか?保持すべきではないときに保持していますか?ありがとうございました。

dictA = [[NSMutableDictionary alloc] init];
objectA *objectA = [[objectA alloc] init];

objectA.ID = 5;
[dictA setObject:objectA forKey:@"apple"];
[objectA release];

objectA.ID = 50;
[dictA setObject:objectA forKey:@"japan"];
[objectA release];

objectA.ID = 6;
[dictA setObject:objectA forKey:@"paris"];
[objectA release];

objectA.ID = 11;
[dictA setObject:objectA forKey:@"pizza"];
[objectA release];

//NSlog:

apple = "objectA: 0x175830";
japan = "objectA: 0x175830";
paris = "objectA: 0x175830";
pizza = "objectA: 0x175830";
4

1 に答える 1

1

私はあなたが意味したと仮定しています:

objectA *objectA_1 = [[objectA alloc] init];

オブジェクトを一度だけ解放する必要があります。これは、ディクショナリに要素を追加するたびにオブジェクトが自動的に保持されるため、ディクショナリが要素を削除するたびに、オブジェクトの release が自動的に呼び出されるためです。

代わりに次のコードを試してください。

dictA = [[NSMutableDictionary alloc] init];
objectA *objectA_1 = [[objectA alloc] init];

[dictA setObject:objectA_1 forKey:@"apple"];
[dictA setObject:objectA_1 forKey:@"japan"];
[dictA setObject:objectA_1 forKey:@"paris"];
[dictA setObject:objectA_1 forKey:@"pizza"];
[objectA_1 release];

descriptionさらに、 NSLog が出力方法を認識できるように、カスタム オブジェクトのメソッドを実装する必要があります。

于 2010-06-10T03:39:39.230 に答える