2017-05-13 5 views
0

私はその後、私は "" 変数classCArrayを設定する、クラスAのインスタンス "A" を作成し、 "B" ClassBのの(インスタンスにa.classArrayを渡す三クラスA、BおよびCObjective-Cクラスインスタンス変数をオブジェクト参照なしの別のクラスインスタンス変数に渡すにはどうすればよいですか?

@interface ClassA 

@property (nonatomic,strong) NSMutableArray *classCArray; 

@end 

@implementation ClassA 
... 
@end 

@interface ClassB 

@property (nonatomic,strong) NSMutableArray *classCArray; 

@end 

@implementation ClassB 
... 
@end 

@interface ClassC 

@property (nonatomic,strong) NSString *name; 

@end 

@implementation ClassC 
... 
@end 

を有します)。上記のコードの後

ClassA *a = [ClassA alloc] init]; 
ClassC *cInClassA = [ClassC alloc] init]; 
cInClassA.name = @"jack"; 
[a.classCArray addObject:c]; 

ClassB *b = [ClassB alloc] init]; 
b.classCArray = a.classCArray; 
ClassC *cInClassB = b.classCArray[0]; 
cInClassB.name = @"Bob"; 

、cInClassA.nameが変更されました。(eauqls "ボブ")私はこれが起こるのを期待していません。私はどうすればいいですか?

答えて

2

割り当てがオブジェクトをコピーすると仮定しているようですが、そうではありません。 aなどの変数は、参照をオブジェクトにのみ保存し、割り当てによって参照がコピーされます。

コードは4つのオブジェクト作成:それぞれabによって参照ClassAClassBのインスタンスを、 およびb.classCArrayの両方によって参照されるNSMutableArrayの単一インスタンス。可変配列によって参照されるClassCと変数cInClassAcInClassBの1つのインスタンスです。

オブジェクトのコピーを作成する場合は、copyメソッドを使用するか、可変オブジェクトの可変コピーを使用する場合はmutableCopyを使用します。

HTH

+0

をyou.Iが '実施ありがとう - (ID)copyWithZone:(NSZone *)ゾーン;'クラスC(これは、ココアでNSCopying方法である)、その後の使用のために[myObjectというコピー]、それが働きました! – Seppuu

関連する問題