2012-07-16 5 views
0

일부 버튼, 텍스트 필드 및 메소드가있는보기가 있습니다. 보기를로드하고 다른보기로 전환 한 다음 다시 전환하면 내 앱이 다운됩니다. 각 메서드에서 NSLog을 추가하여 충돌이 발생하기 전에 마지막 메서드 호출을 확인했습니다. -(void)dealloc{dealloc이 호출되고 있는데 이유가 확실하지 않습니다

이 메서드가 호출 된 이유가 궁금합니다. 보기를 다시로드 할 때마다 호출됩니까? 나는 내 코드를 두 번 확인 했으므로 어디에도 전화하지 않는다.


EDIT :보기를 저장하는 데 사용했던 배열을 릴리스했습니다. @ 대런 덕분에 나는 내 문제를 추적했다.

답변

0

클래스가 더 이상 필요 없게되고 메모리에서 제거되면 Dealloc이 호출됩니다. 보기에서 아무 것도 지키지 않는 포인터가 있으면 그 포인터가 움직입니다.

보기로 /에서 전환하는 방법은 무엇입니까?

(강한) 포인터를보기로 설정하면 자동으로 처리되지 않습니다.

0

-dealloc은 개체의 참조 횟수가 0으로 떨어지면 호출됩니다. 문제를 찾으려면 -dealloc이라는 개체가 무엇인지 파악합니다. 호출 스택의 두 번째 메소드는 무엇입니까? 세 번째? -dealloc이 처음 유효한 개체 포인터로 전송 되었습니까?

이런 종류의 문제에 접근하는 데는 여러 가지 방법이 있습니다. 좋은 첫 번째 단계는 NSZombies (Google for it)를 켜는 것입니다. 잘못된 개체에 메시지 (예 : dealloc)를 보내는 경우이를 알려줍니다. 대개 크래시가 발생하지만 NSZombies를 사용하면 좋은 오류 메시지가 표시됩니다.

+0

좀비를 사용하여 이미 할당이 해제 된 무언가를 할당 해제하려고합니다. 그것은 나에게 16 진수 값을 주지만, 나는 이것을 어디에서 찾을 것인지는 잘 모르겠다. (저는 Xcode에 비교적 익숙합니다). – BloonsTowerDefence

관련 문제