NSString* testObject = [[NSData alloc] init];testObject 在编译时和运行时分别是什么类型的对象?
怪我咯2017-04-21 11:19:58
질문을 이해합니다. 하지만 질문하신 내용은 컴파일 타임 개체에 대한 개념이 전혀 정확하지 않습니다.
우선, NSString *testObject
선언은 컴파일러에게 testObject
이 Objective-C 객체에 대한 포인터임을 알려줍니다. 어떤 종류의 객체를 가리키든 포인터가 차지하는 메모리 공간은 고정되어 있으므로 어떤 종류의 객체로 선언하더라도 최종 생성되는 실행 코드에는 차이가 없을 것이다. 여기서 NSString
정의는 testObject
을 NSString
으로 확인하도록 컴파일러에 지시합니다. 나중에 NSString
이 아닌 메서드가 호출되면 경고가 생성됩니다.
다음으로 NSData
개체를 만들고 이 개체의 메모리 주소를 testObject
에 저장합니다. 그런 다음 런타임 시 testObject
가 가리키는 메모리 공간은 NSData
개체입니다. testObject
을 NSData
객체로 사용할 수 있습니다.