2011-10-04 57 views
1

我有一個HTTP POST連接方法如下圖所示:Objective-C的HTTP連接 - 自動釋放沒有游泳池 - 剛剛泄露

request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]]; 
[request setHTTPMethod:method]; 
[request setValue:contentType forHTTPHeaderField:@"Content-Type"]; 
[request setValue:@"DataType" forHTTPHeaderField:dataType]; 

[request setValue:[NSString stringWithFormat:@"%d", [data length]] forHTTPHeaderField:@"Content-length"]; 
[request setHTTPBody:[data dataUsingEncoding:NSUTF8StringEncoding]]; 
[[NSURLConnection alloc] initWithRequest:request delegate:self]; 
response = nil; 
NSError *error = [[NSError alloc] init]; 

NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
[request release]; 
result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
responseCode = [response statusCode]; 

[error release]; 
if(responseCode == 200) { 
    [self connectionCompletedHere]; 
} 
else 
{ 
    [self connectionFailedHere]; 
} 

它工作正常,但即時得到控制檯消息像__NSAutoreleaseNoPool():對象0x62c3b80類NSURL autoreleased沒有到位 - 只是泄漏。

使用泄漏的工具,我已經把範圍縮小到2線,是造成泄漏:

[[NSURLConnection alloc] initWithRequest:request delegate:self]; 

NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

我在做什麼錯?

在此先感謝

+0

在調用此方法的代碼中,您的autorelease池在哪裏? – Mark

+0

事情是我沒有一個autorelease池 – John

+2

這是錯誤所說 - 你需要有一個 – Mark

回答

0

不分配/初始化/釋放NSError,這是一個基準參數,只是聲明它,並通過它的地址:

NSError *error; 

返工代碼:

... 
response = nil; 
NSError *error; 

NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
[request release]; 
result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
responseCode = [response statusCode]; 

if(responseCode == 200) { 
... 
+0

Omg我可以吻你= D謝謝你救了我的命 – John

+0

不客氣!NSError是一個奇怪的「鴨」。你幫助別人幫助,我投票給我看過的任何答案,看起來不錯。 – zaph

+0

我想要你pvote但顯然我需要15聲望=/ – John