내 인스턴스 변수가 왜 그렇게 이상하게 행동합니까? 내가 올바르게 얻었나요?

StackOverflow https://stackoverflow.com/questions/803218

  •  03-07-2019
  •  | 
  •  

문제

일부 포인터 작업을 시도하기 위해 기존 프로젝트에서 인스턴스 변수를 만들었습니다. 방금 다음과 같이 선언되었습니다.

@interface PointerFun : NSObject {
    NSString* test;
}

@property 컴파일러 지시문이없고 @synthesize가 없으므로 getter와 setter가 없습니다. 단지 테스트를 위해.

그런 다음 포인터 와이 인스턴스 변수로 몇 가지를 시도하는 방법이 있습니다. 실제로 확인하고 싶었던 것은 해당 인스턴스 변수를 NSString 객체 (또는 객체)에 할당 할 때 발생하는 것입니다. 객체를 할당 한 후 인스턴스 var에 할당 한 해당 포인터에 다른 객체를 할당하십시오. 인스턴스 var에서 weell으로 객체를 바꿀 것이라고 생각했습니다.

그래서 여기 내 코드가 있습니다.

NSString *str1 = [NSString stringWithCString:"one"];
NSString *str2 = [NSString stringWithCString:"two"];

test = str2; // assign directly to instance variable (bad thing, just for testing!)
str2 = str1; // now lets be really mean and change the object from that pointer!!

NSLog(@"test: %x, %@", test, test); // test: 52cb10, two
NSLog(@"str1: %x, %@", str1, str1); // str1: 52ca60, one 
NSLog(@"str2: %x, %@", str2, str2); // str2: 52ca60, one

보시다시피, 인스턴스 변수는 STR2 뒤에 초기의 NSSTRING 객체를 계속 지적합니다. 따라서 str1을 str2에 할당했을 때 STR1의 값을 STR2에 메모리 주소 인 STR2에 할당했습니다. 그래서 나는 두 포인터가 같은 가치를 가지고 있었다.

그러나 테스트에 str2의 값을 할당했을 때, 테스트는 "두"객체의 메모리 주소 인 STR2에서 값을 인수했습니다. 따라서 할당 후에도 Pointer Str2의 값을 변경하더라도 인스턴스 변수의 값에 영향을 미치지 않습니다. 그리고 그것은 nsstring 객체에 대한 포인터이기 때문에 str1 또는 str2 인 것과 동일하게 동작합니다. 인스턴스 var이기 때문에 차이가 없습니다. 그것은 단지 변수 일뿐입니다. 내가 맞았 어? PHEW;) ... 희망 그렇게!

도움이 되었습니까?

해결책

세 가지 변수는 실제로 포인터 (테스트, str1 및 str2)이며 "하나"와 "2"라는 2 개의 객체가 생성됩니다.

할 때 :

test = str2;

당신은 객체 "2"에 대한 테스트 포인트를 만들고 있습니다.

str2 = str1;

당신은 str2가 객체 "하나"를 가리키며, 이는 테스트에 전혀 영향을 미치지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top