이 질문의 코드는 너무 길어서 쓸모가 없습니다. 그러나 나는 내 문제가 수업을 발표하는 것과 관련이 있다는 것을 확신한다.개체 릴리스 및 할당 타이밍
나에게는 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를 할당 한 이후로는별로 중요하지 않다고 생각했습니다. 다른 방법은 서로 겹치거나 서로 충돌합니까?
감사합니다.
나는 할당하고 풀어 놓고있는 것을 반복해서 확인해 본 결과 아무런 문제가 보이지 않는다. 나는 또한 retainCount를 살펴 봤지만 그것이 무엇을 위아래로 움직이는 지 이해하지 못합니다. 그것이 다른 클래스의 델리게이트가되면, 그것은 올라갈 것인가? (만약 그렇다면, 위임 클래스에서 그것을 공개하도록하려면 어떻게해야합니까?) – RyanJM
내 오류를 추적하는 데 잠시 걸렸습니다. 결국, 그것은 메모리 할당 오류 였지만 직접 작업했던 파일에는 없었습니다. 다른 클래스에서 나는 빠른 반복을 사용하고 for 루프 (myArray * tempObj for myArray)를 위해 for 루프를 가지고 있었고 루프의 끝에서 해당 오브젝트를 해제하려고 시도했습니다. 그리고 규칙이 진행됨에 따라, 나는 그것을 할당하지 않았으므로 그것을 공개해서는 안됩니다. 당신의 도움을 주셔서 감사합니다. – RyanJM