먼저, 나는 어제 다른 방식으로이 질문을했다. 더 많은 실험을 한 후에도 나는 왜 "왜"에 관해서는 여전히 불명확하다. 내가 뭘해야하는지 이해하지만 무슨 일이 일어나고 있는지 분명히하고 싶다. 여기에 내가 깨끗한 슬레이트, 단일보기 응용 프로그램을 시작하여 간단하게 AppDelegate에에 다음 NSLog를 추가 해요 시나리오 ...다음과 같은 메시지가 나타나면 왜 타이 캐스팅해야합니까?
...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSLog(@"%@",[self.window.rootViewController description]);
return YES;
}
위의 반환
<ViewController: 0x17e7dbf0>
지금이다, "TestViewController"(UIViewController 유형의) 새 클래스를 만들고 스토리 보드의 컨트롤러에 할당하면 위의 NSLog는
<TestViewController: 0x146594c0>
을 반환합니다.
내 질문은 "이전 설명에"TestViewController "유형의 rootViewController가 표시되면 왜 (TestViewController *)를 형변환해야합니까? 나는이 작업을 수행 할 수없는 이유 ... 대신
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
TestViewController *tvc = self.window.rootViewController;
return YES;
}
...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
TestViewController *tvc = (TestViewController*)self.window.rootViewController;
return YES;
}
내가 여기에 안개를 정리하고 싶습니다. 어떤 퍼즐 조각이 빠졌습니까?
도움 주셔서 감사합니다.
왜 downvote? –
먼저 확인해주세요. 도움을 주신 모든 분들께 감사드립니다. 이 권리가 있는지 알려주지. 이것은 컴파일러를 만족시키는 것입니다 (런타임까지 유형에 대해 무엇을하고 싶은지를 알지 못함). 컴파일러를 행복하게 유지하기 위해 @Class 전달 선언과 다르지 않습니다. 그게 옳은가? – user2502232
@ user2502232 예, 그런 것 같습니다. –