2011-05-03 6 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 인 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

+0

좋아, @property와 @synthesize는 단지 속기라는 것을 이해하고있다. @property는 @synthesized 속성을 어떻게 원하는지에 대한 지침입니다. 관찰자 등은 조금 다릅니다. 나는이 tho [KVC와 KVO] (http://www.tomdalling.com/blog/cocoa/how-cocoa-bindings-work-via-kvc-and-kvo)를 발견했을 것입니다. 아마도 –

+0

에 다시 한번 감사드립니다. 첫 번째 경우 (내부에 특성 창이 선언되지 않은 경우), 내부에서 어떤 일이 일어 났는지 설명 할 수 있습니까? 인스턴스 멤버 인 "window"가 내부에 선언되어 있지 않기 때문에 set/get을 호출하는 방법은 무엇입니까? – Forrest

관련 문제