메모리 위치와 포인터, 그리고 관련된 객체에 대해 좋은 길이의 argument을 얻는 동안 우리는 약간의 두통을 겪었습니다 : setter는 전달 된 객체의 메모리 주소를 서로 같게 설정할 수 있지만, 전달 된 객체는 차례로 연관된 객체가 같은가?setter도 연관된 객체를 "재설정"합니까?
이론적으로 같은 메모리 주소를 공유하는 모든 객체는 동일한 객체를 사용해야하므로 은이 동일한 객체입니다. 맞습니까?
메모리 위치와 포인터, 그리고 관련된 객체에 대해 좋은 길이의 argument을 얻는 동안 우리는 약간의 두통을 겪었습니다 : setter는 전달 된 객체의 메모리 주소를 서로 같게 설정할 수 있지만, 전달 된 객체는 차례로 연관된 객체가 같은가?setter도 연관된 객체를 "재설정"합니까?
이론적으로 같은 메모리 주소를 공유하는 모든 객체는 동일한 객체를 사용해야하므로 은이 동일한 객체입니다. 맞습니까?
동일한 메모리 주소를 차지하는 두 개의 Objective-C 개체 (또는 그와 관련된 다른 데이터 구조)를 가질 수 없습니다. * 두 개체가있는 것처럼 보이는 경우 기억의 같은 지점에서, 당신은 사실 하나의 대상을 가지고 있습니다.
포인터를 사용하여 개체에 액세스합니다. 간단한 할당을 사용, 다른 하나의 포인터를 설정 한 경우 :
NSString * s = [NSString stringWithContentsOfFile:@"README"];
NSString * t = s;
는 당신은
하나의 객체에 대한 두 개의 포인터가 있습니다. 개체를 복사 할 필요가 없습니다. 하나의 포인터를 통해 객체의 ivars 중 하나를 변경하면 다른 포인터를 통해 객체를 볼 때 변경된 값을 볼 수 있습니다.
* 전체 학자 인 : 물론, 당신은 ("멜의 이야기"참조) 특정 위치에 데이터를 재 해석 할 수 있지만,이 질문의 범위를 넘어 마술입니다.
당신은 당신이 지나가고 있다고 말할 때, 당신은 지나가는 객체가 아니라 포인터입니다. 그리고 설정되는 것은 메모리 주소입니다.
관련된 개체를 가리키는 메모리 주소가있는 새 포인터가 setter 메서드로 전달되고 내부 개체가 새 주소로 설정되면 이제 양쪽 포인터 (전달 된 집합과 설정된 집합)는 동일합니다. 메모리 주소를 가지며 동일한 연관된 객체를 공유합니다.
Brilliant. 그걸 정리해 줘서 고마워. 부자라면 ... 스트레스? – CodaFi
누가 알겠습니까? 나는 틀린 틀린 틀린 약간의 물건을 확실히 여기에서 썼다. 그는 C++을 생각해봤을지도 모르지만, 할당이 새로운 객체를 생성 할 수 있습니다 (필자는 생각합니다). –