2011-05-03 93 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