(AppDelegate *)的含义

时间:2011-10-24 17:27:20

标签: objective-c ios syntax

有人可以解释以下代码段中的(AppDelegate *)是什么意思吗?

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

4 个答案:

答案 0 :(得分:4)

[[UIApplication sharedApplication] delegate]会返回id。所以你无法访问,例如它的window属性(因为id对象没有它)。

(AppDelegate *)语句导致'id转换为AppDelegate对象,因此您可以访问其组件。

就像拥有NSObject *obj1;NSString *obj2;一样 - 你不能-substringToIndex:obj1 ...

答案 1 :(得分:3)

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

这不是绝对必要的,但是当您在可能不支持该方法调用的类上调用方法iPad时,它将阻止编译器警告。当然,假设AppDelegate有一个名为iPad的方法。

答案 2 :(得分:2)

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

答案 3 :(得分:0)

它只是一个类,用于将委托转换为AppDelegate