Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c (AppDelegate*)的含义_Objective C_Ios_Syntax - Fatal编程技术网

Objective c (AppDelegate*)的含义

Objective c (AppDelegate*)的含义,objective-c,ios,syntax,Objective C,Ios,Syntax,有人能解释一下以下代码段中AppDelegate*的含义吗 (AppDelegate *)[[UIApplication sharedApplication] delegate] iPad] 它只是类,用于将委托强制转换为AppDelegate它只是类,用于将委托强制转换为AppDelegate[[UIApplication sharedApplication]delegate]返回一个id。因此您无法访问它的窗口属性,例如,因为id对象没有它 AppDelegate*语句导致将id“转换”为

有人能解释一下以下代码段中AppDelegate*的含义吗

(AppDelegate *)[[UIApplication sharedApplication] delegate] iPad]

它只是类,用于将委托强制转换为AppDelegate

它只是类,用于将委托强制转换为AppDelegate

[[UIApplication sharedApplication]delegate]返回一个id。因此您无法访问它的窗口属性,例如,因为id对象没有它

AppDelegate*语句导致将id“转换”为AppDelegate对象,以便您可以访问其组件

这就像拥有NSObject*obj1;和NSString*obj2;-无法执行-substringToIndex:with obj1…

[[UIApplication sharedApplication]delegate]返回一个id。因此您无法访问它的窗口属性,例如,因为id对象没有它

AppDelegate*语句导致将id“转换”为AppDelegate对象,以便您可以访问其组件


这就像拥有NSObject*obj1;和NSString*obj2;-无法执行-substringToIndex:with obj1…

该代码正在将[[UIApplication sharedApplication]delegate]的返回值强制转换为类型AppDelegate*


严格来说,这不是必需的,但当您在可能不支持该方法调用的类上调用该方法时,它将防止编译器发出警告。当然,假设AppDelegate有一个名为iPad的方法。

该代码将[[UIApplication sharedApplication]delegate]的返回值强制转换为类型AppDelegate*


严格来说,这不是必需的,但当您在可能不支持该方法调用的类上调用该方法时,它将防止编译器发出警告。当然,假设AppDelegate有一个名为iPad的方法。

委托方法返回一个未分类对象的id,因此编译器没有关于返回对象的信息,特别是不知道它是否有iPad方法。这没关系,但它会让事情变得模糊不清。通过显式地将返回的对象强制转换为AppDelegate类,您告诉编译器您知道返回的委托对象是AppDelegate实例。这允许编译器检查AppDelegate类是否具有iPad方法静态类型。这很好,因为现在编译器可以进行更精确的错误检查。编译器只是相信你的演员阵容,所以不要撒谎!如果你撒谎,并将iPad消息发送给一个没有iPad方法的对象,你的应用程序可能会在运行时崩溃。

委托方法返回一个id,一个未分类的对象,因此编译器没有关于返回对象的信息,特别是不知道它是否有iPad方法。这没关系,但它会让事情变得模糊不清。通过显式地将返回的对象强制转换为AppDelegate类,您告诉编译器您知道返回的委托对象是AppDelegate实例。这允许编译器检查AppDelegate类是否具有iPad方法静态类型。这很好,因为现在编译器可以进行更精确的错误检查。编译器只是相信你的演员阵容,所以不要撒谎!如果你撒谎,并将iPad消息发送给一个没有iPad方法的对象,你的应用程序可能会在运行时崩溃。

因此,它只是将iPad返回的任何方法强制转换为一个名为AppDelegate的类?它将该方法返回的任何对象强制转换为AppDelegate的实例,是的。所以它只是将iPad返回的任何对象强制转换为一个名为AppDelegate的类?它将该方法返回的任何对象强制转换为AppDelegate的实例,是的。delegate方法返回id,而不是NSObject。delegate方法返回id,而不是NSObject。缺少括号:你可能是指[AppDelegate*[[UIApplication sharedApplication]delegate]iPad]缺少括号:您可能是指[AppDelegate*[[UIApplication sharedApplication]delegate]iPad]当然,O.P.可能会询问AppDelegate*中星号的含义。在这种情况下,答案是:当您直接向类发送消息时,您可以使用[UIApplication sharedApplication]中的裸类名,但当您使用类名声明实例的类型时,例如,在此处声明变量或强制转换,您会添加星号,因为类是C指针。当然,O.P.可能会询问AppDelegate*中星号的含义。在这种情况下,答案是:当您直接向类发送消息时,您可以使用[UIApplication sharedApplication]中的裸类名,但当您使用类名声明实例的类型时,例如声明变量或按此处的方式强制转换时,您添加了星号,因为类是C指针。