2011-03-22 66 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的私有實例變量的屬性道具。