2011-03-22 67 views
2

在Xcode 4,当你创建一个新的View-基础应用程序项目,这里是AppDelegate中的.H:iPhone - 苹果默认示例代码缺少一些变量?

#import <UIKit/UIKit.h> 

@class TestAppleProjectViewController; 

@interface TestAppleProjectAppDelegate : NSObject <UIApplicationDelegate> { 

} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet TestAppleProjectViewController *viewController; 

@end 

而且在.M一些项目:

@implementation TestAppleProjectAppDelegate 

@synthesize window=_window; 
@synthesize viewController=_viewController; 

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
     self.window.rootViewController = self.viewController; 
     [self.window makeKeyAndVisible]; 
     return YES; 
    } 

我可以看到属性,而无需瓦尔...
我可以看到与不中的类存在VAR名合成...
我可以看到调用这些属性....

但是......变量在哪里?
为什么这样的代码工作?
是否不再需要在班级中定义变量?属性够了吗?

回答

2

事实上,当你声明一个var作为一个属性时,你不必再声明它为var。之前的我们不得不再次声明它的一个错误是以前版本的Xcode中的一个bug。现在它被纠正了。

这只是一个习惯,减少代码重复,它很好。 (默认情况下,它创建一个隐藏的var,其名称相同,以“_”开头)。

+0

呃......如果只是他们可能已经删除了编写默认合成线的需要...... – Oliver 2011-03-22 11:27:42

+6

旧的行为不是一个“bug”,也不是与Xcode有什么关系---它是[遗留Objective-C运行时]的一个特性(http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtVersionsPlatforms.html)。自动ivar生成是现代运行时的一项功能,仅适用于支持它的平台(iPhone和64位10.5+)。 – 2011-03-22 11:32:02

+0

综合是不一样的!属性是让编译器知道有访问器的var。合成就是生成这些访问器。你可以使用@property而不使用@synthesize并为你自己写评估者。或者简单地声明合成:@synthesize窗口; – 2011-03-22 11:33:49

1

我不知道这个......我想当你写@synthesize prop=_var它会自动创建一个名为_var的私有实例变量的属性道具。