질문을 이해합니다. 하지만 질문하신 내용은 컴파일 타임 개체에 대한 개념이 전혀 정확하지 않습니다.
우선, NSString *testObject 선언은 컴파일러에게 testObject이 Objective-C 객체에 대한 포인터임을 알려줍니다. 어떤 종류의 객체를 가리키든 포인터가 차지하는 메모리 공간은 고정되어 있으므로 어떤 종류의 객체로 선언하더라도 최종 생성되는 실행 코드에는 차이가 없을 것이다. 여기서 NSString 정의는 testObject을 NSString으로 확인하도록 컴파일러에 지시합니다. 나중에 NSString이 아닌 메서드가 호출되면 경고가 생성됩니다.
다음으로 NSData 개체를 만들고 이 개체의 메모리 주소를 testObject에 저장합니다. 그런 다음 런타임 시 testObject가 가리키는 메모리 공간은 NSData 개체입니다. testObject을 NSData 객체로 사용할 수 있습니다.
질문을 이해합니다. 하지만 질문하신 내용은 컴파일 타임 개체에 대한 개념이 전혀 정확하지 않습니다.
우선,
NSString *testObject
선언은 컴파일러에게testObject
이 Objective-C 객체에 대한 포인터임을 알려줍니다. 어떤 종류의 객체를 가리키든 포인터가 차지하는 메모리 공간은 고정되어 있으므로 어떤 종류의 객체로 선언하더라도 최종 생성되는 실행 코드에는 차이가 없을 것이다. 여기서NSString
정의는testObject
을NSString
으로 확인하도록 컴파일러에 지시합니다. 나중에NSString
이 아닌 메서드가 호출되면 경고가 생성됩니다.다음으로
NSData
개체를 만들고 이 개체의 메모리 주소를testObject
에 저장합니다. 그런 다음 런타임 시testObject
가 가리키는 메모리 공간은NSData
개체입니다.testObject
을NSData
객체로 사용할 수 있습니다.