有人可以解释以下代码段中的(AppDelegate *)
是什么意思吗?
(AppDelegate *)[[UIApplication sharedApplication] delegate] iPad]
答案 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