처음에는 사과하는 것이 다소 기본적인 질문이지만 목표 C를 처음 접했을 때 내 질문에 대한 답변을 찾을 수 없었습니다. 검색 (비록 내가 초보자이기 때문에 답변을 찾는 동안 정확한 용어를 사용하지 않았기 때문일 수도있다.)목표 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);
}
나는이 프로그램을 실행 한 후 얻을 출력은 다음과 같습니다 :
@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
:
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를 클래스의 구현입니다
이
내가 실행하는 루프입니다
Aaargh! 완벽한 - 그런 간단한 대답. 많은 감사 – user1979082