首先,道歉,如果这是一个相当基本的问题,但我是Objective C的新手,我一直无法在我的所有问题中找到答案搜索(虽然这可能是因为我是一个新手,不太正确地使用正确的术语,而寻找答案!)Objective C数组元素都以相同的值结尾
我有一个简单的循环,其中我填充一个NSMutableArray与一些自定义对象。我发现在循环之后,我有一个数组的元素似乎都有相同的值:即插入(0,1,2,3)后,我发现我的数组包含(3,3,3,3) 。
该问题仅在使用我的对象时才存在;第二个数组,我只添加字符串,最后填入预期值。
看看我的数组中的对象的地址,我看到他们都是不同的:我是否正确认为这意味着我不只是有一个引用同一个对象的指针数组?
我想知道为什么这不符合我的预期。我有一种感觉,那就是我缺少一些非常基本的东西,任何见解都将不胜感激。
这是循环,我执行:
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"STARTING");
NSMutableArray* myArray1 = [NSMutableArray array];
NSMutableArray* myArray2 = [NSMutableArray array];
for (int i=0; i < 4; i++) {
MyObject* obj = [[MyObject alloc] initWithSomeString: [NSString stringWithFormat: @"ID%u", i]
AndSomeNum: i];
[myArray1 addObject: obj];
[myArray2 addObject: [NSString stringWithFormat: @"ID%u", i]];
NSLog(@" Added to array1: %@", [myArray1 objectAtIndex: i]);
NSLog(@" and array2: %@", [myArray2 objectAtIndex: i]);
}
NSLog(@"ALL DONE:\nARRAY1=%@\nARRAY2=%@", myArray1, myArray2);
}
,我运行此之后获得的输出是:
STARTING
Added to array1: num=0 self=<0x928e9b0> str=<0x9290090> str=ID0
and array2: ID0
Added to array1: num=1 self=<0x9290080> str=<0x928ff80> str=ID1
and array2: ID1
Added to array1: num=2 self=<0x928eb00> str=<0x9290020> str=ID2
and array2: ID2
Added to array1: num=3 self=<0x7499a30> str=<0x7499ae0> str=ID3
and array2: ID3
ALL DONE:
ARRAY1=(
"num=3 self=<0x928e9b0> str=<0x7499ae0> str=ID3",
"num=3 self=<0x9290080> str=<0x7499ae0> str=ID3",
"num=3 self=<0x928eb00> str=<0x7499ae0> str=ID3",
"num=3 self=<0x7499a30> str=<0x7499ae0> str=ID3"
)
ARRAY2=(
ID0,
ID1,
ID2,
ID3
)
这是为MyObject类的实现:
@implementation MyObject
NSString* _blah;
int _num;
-(MyObject*)initWithSomeString: (NSString*)blah AndSomeNum: (int)num {
self = [super init];
_blah = [NSString stringWithString: blah];
_num = num;
return self;
}
-(NSString*)description {
return [NSString stringWithFormat: @"num=%u self=<%p> str=<%p> str=%@", _num, self, _blah, _blah];
}
@end
Aaargh!完美 - 这样一个简单的答案。非常感谢 – user1979082