我有三个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")我不希望这种情况发生。我该怎么做?
答案 0 :(得分:2)
您似乎假设分配复制对象,但事实并非如此。变量(例如a
)只能将引用存储到对象中,并且赋值会复制引用。
您的代码会创建4个对象:分别由ClassA
和ClassB
引用的a
和b
个实例; NSMutableArray
和a.classCArray
引用的b.classCArray
的单个实例;以及可变数组和变量ClassC
和cInClassA
引用的cInClassB
的单个实例。
如果您希望创建对象的副本,请使用方法copy
,或者使用mutableCopy
的可变对象的可变副本。
HTH