2010-06-11 5 views
0

이 질문의 코드는 너무 길어서 쓸모가 없습니다. 그러나 나는 내 문제가 수업을 발표하는 것과 관련이 있다는 것을 확신한다.개체 릴리스 및 할당 타이밍

나에게는 NSURLConnection을 처리하는 helper 클래스 인 ConnectionHelper.h/.m이 있습니다. 기본적으로, 나는 그것이 원하는 URL을주고 데이터를 반환한다 (빠른 json 파싱도 역시 발생한다). 여기에는 호출 클래스 (이 경우에는 DownloadViewController)로 설정된 대리자가 있습니다. 다운로드가 완료되면 [delegate didFinishParseOf:objectName withDictionary:dictionary];이 호출됩니다. 그런 다음 DownloadViewController에서 다음 객체를 다운로드하기 위해 ConnectionHelper를 릴리스하고 새 객체를 할당합니다.

내 문제는, 나는 이것을 한 번하고 두 번째 연결을 만들고 내 프로그램이 충돌하는 것입니다.

[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyNever]; 
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

가 그럼 난 다음 방법 중 하나가 호출 생각하지 않는다 :이 호출 후

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection 
       willCacheResponse:(NSCachedURLResponse *)cachedResponse 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 

그래서 내가 그 권리에 나는 내가 뭔가를 해제 아니에요? 처음 릴리스 할 때 dealloc 함수가 호출되지 않습니다. 할당을 "강제로"강제 할 수있는 방법이 있습니까? 강제로해야합니까? 새로운 호출을 위해 새로운 ConnectionHelper를 할당 한 이후로는별로 중요하지 않다고 생각했습니다. 다른 방법은 서로 겹치거나 서로 충돌합니까?

감사합니다.

답변

0

우선 우선 해제하지 마십시오. 메모리 관리 규칙을 철저히 준수한다면 걱정할 필요가 없습니다. 규칙이 봐 경우 : 앱이 충돌하는 경우

http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/TP40004447-SW1

그것은 뭔가가 초기에 출시되고있는 많은처럼 나에게 소리. 아마도 당신이 당신의 연결을위한 델리게이트로 설정하고있는 객체 일 것입니다. 마지막으로 연결 처리를 위해 ASIHTTPRequest를 살펴 보셨습니까? CFNetwork 래퍼로 매우 사용하기 쉽고 강력합니다.

희망이 도움이됩니다.

+0

나는 할당하고 풀어 놓고있는 것을 반복해서 확인해 본 결과 아무런 문제가 보이지 않는다. 나는 또한 retainCount를 살펴 봤지만 그것이 무엇을 위아래로 움직이는 지 이해하지 못합니다. 그것이 다른 클래스의 델리게이트가되면, 그것은 올라갈 것인가? (만약 그렇다면, 위임 클래스에서 그것을 공개하도록하려면 어떻게해야합니까?) – RyanJM

+0

내 오류를 추적하는 데 잠시 걸렸습니다. 결국, 그것은 메모리 할당 오류 였지만 직접 작업했던 파일에는 없었습니다. 다른 클래스에서 나는 빠른 반복을 사용하고 for 루프 (myArray * tempObj for myArray)를 위해 for 루프를 가지고 있었고 루프의 끝에서 해당 오브젝트를 해제하려고 시도했습니다. 그리고 규칙이 진행됨에 따라, 나는 그것을 할당하지 않았으므로 그것을 공개해서는 안됩니다. 당신의 도움을 주셔서 감사합니다. – RyanJM