2011-03-10 1 views
0

removeFromSuperview의 메모리 관리와 혼동이있었습니다.superview (UIViewController) dealloc 때 subview에서 dealloc이 호출되지 않았습니다

여기 내 코드입니다 :

MySubView *tMySubView = [[MySubView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; 
tMySubView.center = self.view.center; 
tMySubView.tag = 1111; 
[self.view addSubview:tMySubView]; 
[tMySubView release]; 

"자기"의 UIViewController입니다.

"self"는 dealloc을 호출하지만 MySubView는 dealloc을 호출하지 않았습니다.

addSubView retainCount +1을 알고 있습니다.

그래서 나는 [tMySubView가 removeFromSuperview]

그리고 MySubView의 dealloc이 호출 된 "자기"의 dealloc ...에

내가 추가해야합니다 추가 시도 [서브 뷰 removeFromSuperview]; 언제 superView dealloc?

또는 superView removeFromSuperview는 자동으로 subView의 removeFromSuperview ...를 호출합니다.

알아낼 수 없습니다. :(

감사합니다!

답변

0

이 self.view가 제대로 해제되지 않습니다 것을 의미합니다.이 해제 될 때 그것은 단지의 경우 모든 그것의 파단을 제거합니다.

어디있어 (당신에는 loadView 방법을 확인 . 아마 다음과 같습니다 경우) 초기화 :

-(void) loadView { 
    self.view = [[UIView alloc] init]; 
} 

당신이있어 누출이처럼 다시 작성해야 :

-(void) loadView { 
    self.view = [[[UIView alloc] init] autorelease]; 
} 

또는

-(void) loadView { 
    UIView* v = [[UIView alloc] init]; 
    self.view = v; 
    [v release]; 
} 

또한 당신이 self.view를 액세스하는 모든 장소를 확인하고 당신이 그것을 과도하게 유지하지 않을 있는지 확인하십시오.

+0

MyViewController * tMyViewController = [[[MyViewController alloc] init] autorelease]; \t [tNavigationController pushViewController : tMyViewController animated : YES]; 이와 같이 작성합니다. – wei

+0

viewcontroller와 뷰를 혼동하지 마십시오. – Max

+0

보기가 어떻게 생성됩니까? loadView 또는 XIB? – hennes