0

메모리 부족 사고를 피하기 위해 코드를 강화하려고합니다. 특히 다음 단계에 따라 발생합니다.도움말 - 무한 dealloc 루프

  1. 시작 앱.
  2. 모달 뷰 컨트롤러를 제공하는 탭 버튼.
  3. 메모리 시뮬레이션 경고.

어디서나 NSLog 문을 통해 초기 (제시) viewcontroller가 메모리 경고를 받는다는 것을 알게되고, 그때 dealloc 메서드가 충돌 할 때까지 계속 호출됩니다. 디버깅을 위해 NSLog 문을 제외하고 내 didReceiveMemoryWarning, viewDidUnload 또는 dealloc 메서드에는 아무 것도 없습니다.

소리가 어떻게 들리나요? 어쩌면보기 컨트롤러에 다시 포인터가있는 일부 유지 된 인스턴스 변수가 있습니까? 이 문제의 원인이 될 수있는 일반적인 추측이 필요합니다. 1000 줄로 실행되는 전체보기 컨트롤러 코드를 게시 할 수 없습니다.

감사합니다.

+0

흠,보기 컨트롤러에서 보유 횟수가 dealloc 일 때 보셨나요? 나는 그것이 1이어야한다고 생각할 것이다. 또 다른 생각은 컨트롤러를 유지하고있는 델리게이트를 가지고 있으며이 둘 사이에 유지 루프가 있는가? – drekka

+0

새로운 프로젝트와 간단한보기 컨트롤러로 재생산 해 볼 수 있습니까? – Eimantas

+0

그래, 내가 문제를 발견했다고 생각해. 메인 윈도우에 뷰를 추가 한 직후 appcontrol에 viewcontroller를 공개했다. 바보. 이 질문에 적절하게 대답하면 받아 들일 것입니다. – ed94133

답변

2

최근에 댓글 작성자가보기 컨트롤러를 과도하게 출시 한 사례를 수정했다고 말했지만 그 내용에 대해서는 확실하지 않습니다. 뷰 컨트롤러를 너무 많이 놓아도 여전히 dealloc이 한 번만 호출됩니다. 오히려 적절한 [super dealloc];보다, 당신의 dealloc 방법에 [self dealloc];를 호출 "충돌 때까지 반복이라는 의 dealloc 방법"의

훨씬 더 큰 원인. 이 점에서 코드가 올바른지 확인하십시오. 문제가 발생하면 무한 재귀가 발생할 수 있습니다. :)

+0

+1 내 생각. – csano

+0

이것은 원인 인 것처럼 보이지 않지만 이해가 될 것입니다. 뷰가 뷰 컨트롤러에서 유지 카운트를 유지하는 것처럼 이상한 것이어야한다고 생각합니다. 뷰가 해제 될 때 (모달 컨트롤러 아래에 표시되지 않음) 뷰 컨트롤러에 dealloc이 전송되어 내부 오류 조건이 발생했을 수 있습니다. 이 시점에서 실행중인 모든 코드는 할당 취소 된보기 컨트롤러 또는 발표자가없는 모달보기 컨트롤러에있는 것입니까? 어쨌든, 나는 app delegate에서 View Controller를 릴리즈하는 것을 멈추었으며,이 에러는 더 이상 발생하지 않는다. – ed94133

0

ViewControllers release 메서드를 덮어 썼습니까? 이전에 덮어 쓰지 않고 한 번했습니다. dealloc. 심야 코딩 FTL.