메신저 사용자 정의 UIViewController (MyVC)의 dealloc 메서드가 팝업 될 때 호출되지 않는 문제가 있습니다. SO에 대한 몇 가지 다른 답변을 읽고 그것은 내가 왜 dealloc 호출되지 않는 이유입니다 어딘가에 MyVC에 대한 참조를 잡고있는 하나의 범인 것 같습니다.UIViewController에서 dealloc 메서드가 호출되지 않는 문제
Obj *objA = [[Obj alloc] initWithValue:value];
MyVC *newVC = [[MyVC alloc] init];
newVC.somIvar = objA;
[self.navigationController pushViewController:newVC animated:YES];
[newVC release];
[objA release];
난 여전히 관한 혼동이 여전히 MyVC을 밀어 루트 뷰 컨트롤러 (RootVC가)에 대한 참조 또는 할당 해제와 같은 이상한 것 자체가 해제되지 않는 MyVC 내부에 뭔가를 가지고 있음을 의미합니까하고 무엇 메서드가 호출되지 않습니다 그래서 obv는 여전히 모든 객체에 대한 참조를 가지고 있습니까?
는 지금까지 내가 그것을 MyVC 터지는에 밀어에서 이벤트의 순서를 이해 있습니다 :
- 만들고 뒤로 버튼은 메뉴 바, popViewControllerAnimated에 눌렀을 때
- 상기 한 바와 같이 RootVC에서 MyVC를 밀어 : navigationController에서 호출되고 MyVC가 팝됩니다.
- MyVC에 대한 추가 참조가 없으면 navigationController가 dealloc 메서드를 호출합니까?
3 번이 확실하지 않습니까? 나는 장비를 사용하여 누출을 발견하지 못했고, dealloc 메소드가 호출되지 않았기 때문에 MyVC 내부의 무언가가 될 수없는 것처럼 보입니다. 어쨌든 어떻게 정리합니까?
"나는 다른 객체의 iVar에 vC를 할당하기 위해 점 표기법을 사용하고 있으므로", im은 혼란 스럽긴하지만 응답은 Thx입니다. 나는 내 newVC에서 ivar에 ojbA를 할당하고 있다고 생각했다. 또한 newVC의 dealloc 메소드 내에 [someIvar release]가 있습니다. 그러나 언급했듯이 dealloc 메소드는 newVC에 대해 호출되지 않으므로 자연스럽게 [someIvar release]도 호출되지 않습니다. – James
@James : 네 말이 맞아, 토스터가 혼란스러워하는 것 같아. 거기에 유지되는 objA입니다 (적어도 속성이 할당 또는 복사하는 대신 보유 선언 된 경우). 내가 게시 한 코드에는 newVC가 추가로 보유 할 수있는 내용이 없습니다. – Anomie
네 말이 맞아. 나는 물건을 섞었다, 미안하다! !! 그렇다면 일들이 분명하지 않습니다. 두려워요. 나는 다시 생각할 것이고, 다른 아이디어를 생각해 내지 않으면 내 대답을 삭제할 것입니다. 다시, 미안 해요! – Toastor