Objective-c添加具有不同属性的数组相同实例

sel*_*tch 0 arrays objective-c ios

我正在尝试以下代码来创建实例,分配属性,添加到数组.然后,分配新属性并再次添加.但是,数组将包含2个相同的对象(等于添加的第二个对象).Message类只有几个(非原子的,保留的)NSStrings/Integer属性.这可能与我对指针的理解有关,有人可以解释一下吗?

    self.messages=[[NSMutableArray alloc]init];
    Message *m=[[Message alloc]init];
    m.cb=@"2402";
    m.ck=1001;
    m.msg=@"as";
     [self.messages addObject:m];

    m.cb=@"2422";
    m.ck=1002;
    m.msg=@"aadfsdsdfdssdklsdflkh";
    [self.messages addObject:m];
    NSLog(@"%@",self.messages);
Run Code Online (Sandbox Code Playgroud)

lna*_*ger 5

当您添加一个对象数组,它并没有对象的副本只是一个参考,将其添加到阵列,而是.如果你想要两个不同的对象,那么你需要创建两个不同的对象而不是重复使用相同的对象(或者,正如@Brendon指出的那样,当你将它添加到你的数组时创建一个副本).

要修复您的示例,最常用的技术是在开始修改第二个对象的属性之前添加以下行:

m=[[Message alloc]init];
Run Code Online (Sandbox Code Playgroud)

或者,使用第二个指针和对象而不是重用m.

编辑:
要添加副本,请更改[self.messages addObject:m];[self.messages addObject:[m copy]];,假设Message该类符合NSCopying协议.