2012-03-29 3 views
0

iOS 4 애플리케이션을 개발 중입니다.IBOutlets 속성. 출시 또는 출시하지 않음

@interface BlogViewController : UIViewController 
{ 
    ... 

    UIView* tabBar; 
} 

@property (nonatomic, retain) IBOutlet UIView* tabBar; 

및 구현 :

및 구현 :

@implementation BlogViewController 

@synthesize tabBar; 

- (void) dealloc 
{ 
    ... 

    [super dealloc]; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
    self.tabBar = nil; 
} 

내 질문에 내가 IBOutlet 재산이있는 경우, 그것은 필요가를 선언하는

나는이의 ViewController가 UIView이 마음에 드십니까?

@interface BlogViewController : UIViewController 
{ 
    ... 

    UIView* tabBar; 
} 

내가 할 경우 dealloc에 게시해야합니까?

- (void) dealloc 
    { 
     ... 
     [tabBar release]; 

     [super dealloc]; 
    } 

답변

3

순서대로 : 아니오 인스턴스 변수를 선언 할 필요가 없습니다. 그렇습니다. 개체를 해제해야합니다. 자동 참조 카운팅을 사용하여 메모리 관리 기능을 올바르게 사용할 수 있습니다.

+0

확인. 그래서 IBOutlet을 속성으로 만 사용한다면 다른 것을 할 필요가 없습니다 ('- (void) viewDidUnload; 만), 맞습니까? 귀하의 답변에 감사드립니다. – VansFannel

+0

그것은 당신이 속성'retain' 메모리 속성을 주었기 때문입니다. 당신은 dealloc 또는'viewDidUnload'에 대한 릴리즈의 값을 유지하는 균형을 유지해야합니다. 'assign' 속성을 사용하면 그럴 필요가 없습니다. –

+0

'dealloc' 또는'viewDidUnload'? 우리가'viewDidUnload'에서 release한다면'dealloc'에 그럴 필요가 없다는 뜻입니까? –

1

예,을 보유한 경우 IBOutlet을 해제해야합니다 (). 평소 연습 대신 retain 또는 strongassign 또는 weak@property을 사용하는 것입니다, 그래서

그러나, IBOutlets는 자신의 펜촉 파일에 의해 소유하고 있습니다. 어떤 경우에는 해제해야합니다.

+0

확인. 그리고,'viewDidUnload'에서 assing을 사용한다면'self.tabBar = nil;'을 설정해야합니까? 감사. – VansFannel

+0

물론, 그렇지 않은 이유는 무엇입니까? 'assign' 또는'weak' 속성을 사용하면'nil'으로 설정하면 포인터를'nil'으로 설정하고 다른 작업은하지 않습니다. – yuji

+0

고마워. 두 대답 모두 매우 유용했습니다. – VansFannel

0

콘센트를 만들 때 xcode 4 이상을 사용하는 경우 dealloc 및 viewDidUnload에서 같은 코드를 릴리스하므로 다시 할 필요가 없습니다.