2011-06-13 7 views
2

요청이 완료되기 전에 사용자가보기 컨트롤러를 나가면 ASIHTTP를 사용하여 내보기 컨트롤러로 HTTP 요청을 실행 중입니다. ASIHTTP 코드에서 EXC_BAD_ACCESS를 얻습니다. if (delegate ...)ASIHTTP -보기를 남겨두고 EXC_BAD_ACCESS를 얻으십시오

내가보기 컨트롤러 dealloc에서해야 할 일이 있습니까? 사용자가 떠나면 요청을 그냥 삭제하고 싶습니다.

+2

일반적으로 코드에 문제가 있습니다. 몇 가지를 게시하면 문제를 해독하려고 노력할 것입니다. – esqew

+0

크래시가있는 경우 백 트레이스 또는 오류 로그가 있습니다. 그것을 게시하십시오. – bbum

답변

5

이와 같은 문제의 가장 일반적인 이유는 여전히 활성 상태 인 ASIHTTPRequest 개체와 대리인 필드가 현재 삭제 된 개체를 가리키는 곳입니다. EXC_BAD_ACCESS는 ASIHTTPRequest가 위임자에게 요청이 완료되었음을 알려주려고 할 때 발생합니다. 가지고 있어야 asihttprequest 대표있는 개체에 대한

귀하의 dealloc 방법

:

request.delegate = nil; 
[request cancel] 
[request release] 

을 한 번에 활성화 된 하나 개의 요청이있는 경우, 당신은 어디 새 요청을 시작하는이 동일한 코드를 가지고 있어야합니다 이전 요청이 올바르게 취소되었는지 확인합니다.

요청이 활성화 된 경우 둘 모두를 추적하고 모든 요청을 취소하고 무시해야합니다.

참고로 저는 18 개월 동안 ASIHTTPRequest를 사용해 왔으며 취소 요청과 관련된 어려운 경쟁 조건에 대한 여러 가지 수정 사항을 후원했습니다.

+0

요청을 해제 할 필요는 없습니다. – peterp

+0

@peterp 이해가 잘 모르겠 으면 : 요청을 공개하지 않으면 메모리 누수가 발생합니다. (그리고 요청을 유지해야하는 경우 그렇지 않으면 dealloc 메서드에서 여전히 취소 할 수 있다는 것을 보장 할 방법이 없습니다.) – JosephH

+0

@josephH @josephH이를 유지할 필요가 없으므로 보유 할 필요가 없습니다 dealloc 메소드에서 주위에 있어야한다는 것을 보장하십시오. dealloc 메소드에서 주변에 없다면 더 이상 문제가 없습니다. – peterp

관련 문제