gpt4 book ai didi

ios - 当我得到以下内容时,为什么必须输入?

转载 作者:行者123 更新时间:2023-11-29 03:45:53 24 4
gpt4 key购买 nike

首先,我昨天以不同的方式问了这个问题。经过更多实验后,我仍然不清楚“为什么”。我明白我需要做什么,但想弄清楚正在发生的事情。这是场景...

我从一个干净的石板开始,一个单一 View 应用程序,只需将以下 NSLog 添加到 appDelegate ...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSLog(@"%@",[self.window.rootViewController description]);

return YES;
}

以上返回

<ViewController: 0x17e7dbf0>

现在,当我创建一个名为“TestViewController”(类型为 UIViewController)的新类并将其分配给 Storyboard中的 Controller 时,上面的 NSLog 返回

<TestViewController: 0x146594c0>

所以,我的问题是,“如果前面的描述显示 rootViewController 的类型为“TestViewController”,为什么我需要类型转换 (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;
}

我想拨开这里的迷雾。我缺少哪一 block 拼图?

感谢您的帮助!

最佳答案

在第二种情况下,您告诉编译器您知道得更多。 self.window.rootViewController 的返回类型是 UIViewController 指针。但是您试图将其分配给 TestViewController 类型的指针。如果没有强制转换,编译器会警告您这不是正确的分配。通过将转换到位,您就告诉编译器“相信我 - 我知道 View Controller 实际上是一个 TestViewController”。当然,如果事实证明您错了,那么在运行时可能会出现问题,也可能不会出现问题。

在第一种情况下,您将在应用程序运行时看到实际类的输出。 description 方法返回对象的实际类的名称及其在内存中的地址。

你的两个案件确实没有任何关系。

关于ios - 当我得到以下内容时,为什么必须输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17767597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com