Objective c (AppDelegate*)的含义
有人能解释一下以下代码段中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 *)[[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指针。