いくつかのオブジェクトで構成される単純な NSMutableArray が 2 つあります。これらのオブジェクトの一部は共通ですが、両方の配列の用途がまったく異なる目的で定義されているため、両方の配列に格納する必要があります。
ただし、問題は、両方の配列に同じオブジェクトを追加した後、共通オブジェクトの 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
次に、配列 One の 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 番目の配列から) *
2
ここで、MutableArray がオブジェクトのコピーを保持していることがわかりますが、参照のみを格納したいと考えています。つまり、1 番目の配列のオブジェクトの値を変更すると、2 番目の配列に反映されるはずです。
どうすればそれができますか?他の選択肢はありますか?
ありがとう、 パラス・メンディラッタ