私は2つの単純なNSMutableArrayをいくつかのオブジェクトで構成しています。これらのオブジェクトの中には、一般的なものもあれば、両方の配列の用途がまったく異なる目的のために定義されているため、両方の配列に格納する必要があります。保持カウントを増やさずに2つの異なるNSMutableArrayに値を追加する
しかし、同じオブジェクトを両方の配列に追加した後、共通オブジェクトの1つの値を変更すると2番目の配列に反映されないという問題があります。例えば
、
のは、我々は2可変にNSArrayを持っているとしましょう:
NSMutableArray *mutableArrayOne;
NSMutableArray *mutableArrayTwo;
は、今度は、これらの配列が含まれている必要がありますオブジェクト定義を作成してみましょう。
@interface: DummyObject : NSObject
{
int objectValue;
}
@property (nonatomic) int objectValue;
-(void) printObjectValue;
@end
次に、配列を格納するための基本クラスを作成しましょう。
基本クラス定義
@interface: BaseClass : NSObject
{
NSMutableArray *mutableArrayOne;
NSMutableArray *mutableArrayTwo;
}
-(void) init;
-(void) printBothArrays;
@end
基本クラスの実装
@implementation BaseClass
-(void) init
{
// initialize the mutable array.
mutableArrayOne = [[NSMutableArray alloc] initWithCapicity:5];
mutableArrayTwo = [[NSMutableArray alloc] initWithCapicity:5];
DummyObject *dummyObject = [DummyObject alloc];
[dummyObject setObjectValue:5];
DummyObject *dummyObjectTwo = [DummyObject alloc];
[dummyObjectTwo setObjectValue:2];
[mutableArrayOne addObject:dummyObject];
[mutableArrayOne addObject:dummyObjectTwo];
[mutableArrayTwo addObject:dummyObjectTwo];
}
@end
今私は、配列の一つでDummyObjectを変更してみましょう:
for (DummyObject* dummyObject in mutableArrayOne)
{
[dummyObject setValue:100];
}
問題 は今ここに私は両方の配列オブジェクトの値を印刷しています問題を開始: -
印刷まずアレイを
for (DummyObject* dummyObject in mutableArrayOne)
{
[dummyObject printObjectValue];
}
* (最初の配列から)出力ログ*
100
100
第2の配列
for (DummyObject* dummyObject in mutableArrayTwo)
{
[dummyObject printObjectValue];
}
* 出力ログ(二番目の配列から)*
2
そこでここではMutableArrayは、オブジェクトのコピーを保持していることがわかります、しかし、私は唯一の参照を格納します。つまり、1番目の配列のオブジェクトの値を変更すると2番目の配列に反映されるはずです。
どうすればいいですか? 他の選択肢はありますか?
おかげで、 パラスMendiratta
コード例に入力アドレスがありますか?最初の配列からの出力は2 100sを返し、2番目の配列からの出力は1 2を返します。つまり、2番目のオブジェクトを最初の配列に追加し、1を2番目の配列に追加します。 (あなたのスペルミスは、最初の配列にそれらを追加することになります) – Pochi
ありがとう、私はサンプルコードを修正しました。 – codesnooker
あなたのコードがまさにそのようなものなら、gettin 100ではない2番目の可変配列を印刷するよりも確実ですか? – Pochi