在对象上找不到属性“窗口”?

时间:2012-09-25 13:55:43

标签: iphone objective-c cocoa-touch

这出现在另一个问题中(由meronix友好回答)但我很想知道这里发生了什么,这是一个LLVM / Clang问题,还是两个语句在某种程度上有所不同

enter image description here

我知道我可以通过添加(见下文)来解决这个问题,所以比任何事情更好奇......

enter image description here

1 个答案:

答案 0 :(得分:5)

两个语句 不同。只有在左值的类型声明属性时才能使用属性。这是因为属性的getter和setter可能不明显(通常是布尔属性的情况,其中getter显式设置为isSomething。)如果没有强类型信息,编译器无法推断出。

然而,[lvalue message]语法没有这种歧义,因此编译器允许它。由于左值的类型为id,因此可以在没有编译器警告的情况下向其发送任何已知消息。只有两个签名对应同一个选择器时,编译器才会发出警告(例如,一个类具有- (UIWindow *)window而另一个类具有- (int)window。)

UIApplicationDelegate协议定义了window属性,因此当您明确地将对象键入id <UIApplicationDelegate>时,编译器会知道该属性并可以使用它。