我刚刚下载了最新的iOS SDK(4.3),并注意到当我启动基于Window的应用程序时,UIWindow未在头文件中声明,它仅作为属性提及。
#import <UIKit/UIKit.h>
@interface GleekAppDelegate : NSObject <UIApplicationDelegate> {
IBOutlet UILabel *label;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@end
我希望,并且从旧的SDK中记住,上面的代码应该是
#import <UIKit/UIKit.h>
@interface GleekAppDelegate : NSObject <UIApplicationDelegate> {
IBOutlet UILabel *label;
UIWindow *window;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@end
这只是SDK的新功能吗?
由于
答案 0 :(得分:3)
新的Objective-C运行时能够在不明确声明的情况下合成ivars。来自Runtime Difference in The Objective-C Programming Language:
一般来说属性的行为 现代和遗产都是一样的 运行时(请参阅“运行时版本和运行时”) 平台“在Objective-C运行时 编程指南)。有一把钥匙 区别:现代运行时 支持实例变量合成 而遗留运行时没有。
...
使用现代运行时,如果不这样做 提供一个实例变量, 编译器为你添加一个。
来自Runtime Versions and Platforms in Objective-C Runtime Programming Guide:
Mac OS X v10.5及更高版本上的手机应用程序和64位程序 使用现代版本的运行时。
其他程序(Mac OS X桌面上的32位程序)使用旧版 运行时的版本。
还要看看这个问题: