2009-12-29 5 views
0

보기 기반 응용 프로그램에서보기를 표시하고 사용자가 해당보기를 완료하면 완료가 클릭되고보기가 제거됩니다. 그러나, 그것은 내가 바라는 것인데 뷰를 dealloc하지 않습니다. 이 유형의보기에서 탈퇴하는 적절한 방법은 무엇입니까?보기를 올바르게 할당 해제

현재 두 번째보기가 호출되기 전에 nil'ing하고 있습니다. 그것은 작동하고 두 번째 관점은 다시 초기화됩니다. 그러나, 두 번째보기가 자체를 파괴하는 것이 더 적절하지 않습니까 (removeFromSuperview 이후에 없음)? 첫 번째보기에서

:

//show next view 
aView = nil; 
if(aView == nil) 
{ 
    aView = [[AView alloc] initWithNibName:@"aView" bundle:nil]; 
} 
[self.view addSubview: aView.view]; 

클릭 aView에 완료 즉시

[self.view removeFromSuperview]; 

답변

1

removeFromSuperview 메서드는 자동으로 "aView.view"를 릴리스하므로 첫 번째 뷰 컨트롤러에서 aView를 해제하지 않아야합니다. 난 당신이 머리 파일에 AView *aView을 선언했다고 생각하지만, 당신은 필요가 없습니다. 이 같은 로컬 변수로 aView을 선언 할 수있다 :

이전에 첫 번째로 반응 상태로의 ViewController를 설정하면
// go to second view 
SecViewController *sec = [[SecViewController alloc] initWithNibName:@"SecView" bundle:nil]; 
[self.view addSubview:sec.view]; 

// go back 
[self.view removeFromSuperview]; 
+0

감사합니다. 내가 헤더 파일 선언을 제거하고 잘 작동합니다. – 4thSpace

1

[self.view addSubview: aView.view]; 

한 후에는 추가해야합니다 :

[aView release]; 

하위보기가보기 컨트롤러의보기에 유지되어 공개 될 수 있습니다.

+0

작동하지 않습니다. aView의 단추에 IBAction 연결이 있습니다. 그것을 클릭하면 즉시 EXC_BAD_ACCESS가됩니다. 버튼의 중단 점은 절대 적중되지 않습니다. – 4thSpace

0

위의 답변은 둘 다 객관적인 방식으로 메모리를 관리해야하는 올바른 이론입니다. removeFromSuperview은 실제로 당신이 좋아 그래서, 내가 생각하는 당신을 위해 릴리스를 호출합니다 callling

http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instm/UIView/removeFromSuperview

:

dev에 문서에 따라

.

+0

아니요 - 출시되지 않습니다. 아이 뷰의 dealloc는 결코 불려 가지 않습니다. 보기보다는 오히려 저는 viewcontroller라고해야합니다. – 4thSpace

1

(모션 이벤트에 응답하고자) 응답자 체인 컨트롤러를 유지합니다. 컨트롤러를 완전히 파괴하려면 첫 번째 응답자를 사임해야합니다.

[self resignFirstResponder]; 
[self.view removeFromSuperview]; 
관련 문제