저는 iPhone 개발에 익숙하지 않고 기본 창에서 하위보기를 제거하는 데 문제가 있습니다. 문제는 removeFromSuperview를 호출 한 후에도 뷰가 여전히 표시된다는 것입니다.removeFromSuperview가 내 iPhone 응용 프로그램에서 UIView를 숨기지 않는 이유는 무엇입니까?
하위 뷰를 생성하고이 코드를 통해 디스플레이 트리에 추가됩니다 나중에 그런
// Instantiate the controller for the authentication view
AuthenticationController* controller = [AuthenticationController alloc];
[controller initWithNibName:@"AuthenticationView" bundle:[NSBundle mainBundle]];
authController = controller;
// Add the authentication view to the window
[[stateManager appWindow] addSubview:[authController view]];
, 나는이 코드는 중단 점을 설정하여 실행되는 것을 확인 한이 난 어떻게 보기 제거하기 :
- (void)dealloc {
[authController release];
[super dealloc];
}
: 그것은 중요한 경우
[[authController view] removeFromSuperview];
을, 여기에 뷰 컨트롤러의 소유자의를 수행하는 할당 해제 코드입니다3210
이 하위보기가 계속해서 표시되는 원인은 무엇입니까?
작동하지 않는 것 같습니다. 'initWithNibName :'메소드는 보유 개수가 1 인 컨트롤러를 생성합니다. 여러분은 그것을 유지하지 않고'authController' (인스턴스 변수라고 가정합니다)를 할당합니다. 그런 다음 retain count를 0으로 다시 설정하고 객체를 할당 해제해야합니다. 마지막 줄에 올 때,'authController'가 없어야합니다. –
귀하의 평가가 정확하다고 생각하지 않습니다. 'authController'는 참조를 유지하는 속성입니다. 그래서 나는 [컨트롤러 릴리즈]'를하기 전에 객체의 보유 카운트가 2이고, '탈퇴'중 '릴리즈'는 객체를 해제하지 않았습니다. – Jacob
@ Jacob - 여기에 Squeegy가 맞습니다. 당신이 말하는 것은 ** 당신이 self.authController = controller; 가지고 계시 겠지만 컨트롤러를 유지하지 않으므로 authController에 할당 한 포인터에 액세스 할 때 잘못된 메모리 참조가 표시됩니다. – DougW