2011-05-03 95 views
0

通常我們有這樣的關於產品@property和@synthesize

@interface TestAppDelegate : NSObject <UIApplicationDelegate> { 

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

@synthesize window; 

而且還第二個版本的代碼

@interface TestAppDelegate : NSObject <UIApplicationDelegate> { 
     UIWindow *_window; 
} 
@property (nonatomic, retain) IBOutlet UIWindow *window; 

@synthesize window = _window; 

Quetions是

  • 有什麼大的差別?哪個更好?爲什麼?
  • 對於第一個版本,爲什麼窗口的默認屬性成員是_window,在第二個版本中。 KVC或KVO在裏面工作嗎?

回答

1
在默認情況下

它是一樣的

@interface TestAppDelegate : NSObject <UIApplicationDelegate> { 
     UIWindow *window; 
} 
@property (nonatomic, retain) IBOutlet UIWindow *window; 

@synthesize window = window; 

這實際上並不需要對合成的分配。並可能會產生一個錯誤。

這是我正常的做法。

@interface TestAppDelegate : NSObject <UIApplicationDelegate> { 
     UIWindow *window; 
} 
@property (nonatomic, retain) IBOutlet UIWindow *window; 

@synthesize window; 

我明確地聲明實例變量

UIWindow *window; 

,讓我知道它的存在,(他們一般都緊挨着對方。)

,我被他們分開我保留的那些和我沒有的那些。所以我知道釋放他們在我的dealloc方法

+0

是的,我知道這一點。我想深入瞭解裏面的一些細節。 – Forrest 2011-05-03 04:00:36

+0

好吧,這是我的理解@property和@synthesize只是簡寫。 @property是關於你希望屬性@synthesized的說明。觀察員等等有些不同。我發現這個[KVC和KVO](http://www.tomdalling.com/blog/cocoa/how-cocoa-bindings-work-via-kvc-and-kvo)或許它會幫助 – 2011-05-03 04:42:26

+0

再次感謝。你能解釋第一個案例(裏面沒有屬性窗口聲明),裏面發生了什麼?因爲我們沒有內部聲明的實例成員「窗口」,如何調用set/get? – Forrest 2011-05-04 02:40:24