拜托,纠正我,我错了(我是个乞丐) 我想将一个类对象存储到NSArray中。例如:
MySimpleClass *mscObj = [[MySimpleClass alloc] initWithSomething:@"something"];
NSMutableArray *myarr = [[NSMutableArray alloc] init];
[myarr addObject:mscObj];
mscObj = @"somethingelse";
然后我的myarr指数0从@“something”变为@“somethingelse”。为什么?我可以只将副本存储到数组吗?
编辑: 在MySimpleClass中:
#import <Foundation/Foundation.h>
@interface MySimpleClass : NSObject {
}
@property (strong,nonatomic) NSString *objectName;
@property (strong,nonatomic) NSString *objectTarget;
-(void)addName:(NSString*)name;
-(void)addTarget:(NSString*)target;
@end
.m文件
#import "MySimpleClass.h"
@implementation MySimpleClass
@synthesize objectName;
@synthesize objectTarget;
-(void)addName:(NSString*)name{
self.objectName = name;
}
-(void)addTarget:(NSString*)target{
self.objectTarget = target;
}
-(void)flushAll {
self.objectTarget = nil;
self.objectName = nil;
}
@end
然后在其他课程中我有:
MySimpleClass *mscObj = [[MySimpleClass alloc] initWithSomething:@"something"];
[myarr addObject:[mscObj copy]];
int testunit = [myarr count];
for(int i=0;i<testunit;i++) {
MySimpleClass *myelement = [myarr objectAtIndex:i];
NSLog(@"%@ : %@",myelement.objectName,myelement.objectTarget);
}
答案 0 :(得分:3)
根据您发布的代码,由于第四行mscObj = @"something else";
,数组中的第一个对象(索引0)不会更改。该行改变了指针mscObj
本身的值,因此它将指向一个完全不同的对象。如果数组中的对象发生了变化,我相信您使用的真实代码与您发布的内容不完全匹配 - 请检查一下。
但是,如果您使用mscObj
指针来更改它指向的对象的属性,那么您将更改数组中的对象:
mscObj.something = @"somethingelse";
您要更改something
引用的对象的mscObj
属性,但您不会更改mscObj
的值。这个将更改数组中对象的内容,因为它与mscObj
指向的对象相同。
答案 1 :(得分:1)
尝试:
[myarr addObject:[[mscObj copy] autorelease]];
答案 2 :(得分:1)
当你这样做时
[myarr addObject:mscObj];
myarr保留对mscObj的引用。因此,只要mscObj被改变,myarr就会反映出这种变化。
当你这样做时
[myarr addObject:[mscObj copy]]; // I've left the autorelease out for simplicity
myarr保留对mscObj新副本的引用。当mscObj被更新后,myarr将不会反映更改,因为它的引用指向一个完全不同的对象。
修改
要使复制工作,你的班级** MySimpleClass **需要实现NSCopying。请参阅此SO答案以获取相关帮助。
答案 3 :(得分:0)
这是因为指针。索引处的对象:0保留在内存中的相同位置。它将始终更改。
尝试在添加数组后重新绑定mscObj并使用@&#34; somethingelse&#34;
创建一个新的MySimpleClass对象答案 4 :(得分:0)
mscObj是一个引用,数组存储的是引用。因此,如果您从容器外部操纵对象,则引用会反映更改。考虑参考差异的值。