如何将Objective-C类实例变量传递给另一个没有对象引用的类实例变量?

时间:2017-05-13 03:00:03

标签: objective-c

我有三个A,B和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

然后我创建实例" a" A类,集合" a"变量classCArray,并将a.classArray传递给" b"(ClassB的实例)。

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" Bob")我不希望这种情况发生。我该怎么做?

1 个答案:

答案 0 :(得分:2)

您似乎假设分配复制对象,但事实并非如此。变量(例如a)只能将引用存储到对象中,并且赋值会复制引用。

您的代码会创建4个对象:分别由ClassAClassB引用的ab个实例; NSMutableArraya.classCArray引用的b.classCArray的单个实例;以及可变数组和变量ClassCcInClassA引用的cInClassB的单个实例。

如果您希望创建对象的副本,请使用方法copy,或者使用mutableCopy的可变对象的可变副本。

HTH