2010-02-28 3 views
0

sendSynchronousRequest이 누출을 일으키는 이유는 무엇입니까? 계기는 책임있는 프레임이 NSURLConnection이고 sendSynchronousRequest과 함께 라인에서 누출 된 NSCFString을 가리킨다.NSURLConnection에 대한 누출보고 문제 sendSynchronousRequest

이 내용은 OS 2.2 또는 그 이전에 알려진 문제 였지만 지금은 반드시 수정해야한다는 내용을 읽었습니다. 이견있는 사람?

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 

NSURL *url = [NSURL URLWithString:@"http://www.mysite.com/api/v1/dosomething"]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:20.0]; 
[request setHTTPMethod:@"POST"]; 

NSData *bodyData; 

[request setValue:@"text/plain" forHTTPHeaderField:@"Content-Type"]; 

NSString *body = @"test"; 
bodyData = [body dataUsingEncoding:NSUTF8StringEncoding]; 

[request setHTTPBody:bodyData]; 
[body release]; 

[[NSURLCache sharedURLCache] setMemoryCapacity:0]; 
[[NSURLCache sharedURLCache] setDiskCapacity:0]; 

NSHTTPURLResponse *response = nil; 
NSError *error = nil; 
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
NSString *responseString = [[NSString alloc]initWithData:responseData encoding:NSUTF8StringEncoding]; 
+1

어쨌든 동기식 연결을 사용하는 것은 꽤 끔찍합니다. 잠재적으로 긴 네트워크 작업을 실행하는 동안 주 스레드를 차단하고 있습니다. –

+1

마이크가 일반적으로 말하는 것은 일반적으로 좋은 충고이지만, 단지 그것을 뉘앙스하게하는 것입니다. 메인 스레드가 아닐 수도있는 호출 스레드를 차단하고 있습니다. – nall

+0

팁 @ 감사합니다.하지만 저는 완전히 알고 있습니다. 이것은 확실히 "주요"스레드가 아닙니다. 이것은 배경 스레드이며 실제로이 스레드를 계속하려면 동기 결과가 필요합니다. – marcc

답변

1

내 프로젝트에 동일한 문제가 있습니다. 나는 새로운 메소드를 작성하고,이 메소드는 asynchrousRequest를 만든다. 그 후에 저는이 방법을 호출합니다. performSelector .... waitUntilDone : 예. 그것은 나를 위해 일했고 적어도 누출은 감소되었습니다.

+0

나는 이것을 시도하는 것에 대해 논쟁 해왔다 ... 만약 내가이 접근법을 취하면 그것이 효과가 있는지 알 수있다. – marcc

관련 문제