0

我正在使用此代码,但在分析时,它告诉我在response_error,request_response变量内有许多内存泄漏。HTTP请求内存泄漏

我尝试了几个地方把每个变量的release代码用在函数中,但是它也一直崩溃,并且没有错误信息。 (通常是EXC_BAD_ACCESS其中指向内存访问错误)

我认为这可能是NSURLConnection sendSynchronousRequest方法的问题,但我不确定。

有人可以给我一个建议或地方release块在这个代码的正确位置?

感谢

NSString *request_url = [NSString stringWithFormat:@"http://www.server.com/api/arg1/%@/arg2/%@/arg3/%@",self._api_key,self._device_id,self._token]; 
NSURL *requestURL = [NSURL URLWithString:request_url]; 
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:requestURL]; 
NSError *response_error = [[NSError alloc] init]; 
NSHTTPURLResponse *_response = [[NSHTTPURLResponse alloc] init]; 
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:&_response error:&response_error]; 
NSString *str_response = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; 
return [[str_response JSONValue] valueForKey:@"pairing"]; 

其中变量像

@interface MyClass : NSObject { 
    NSString *_device_id; 
    NSString *_token; 
    NSString *_api_key; 
} 
@property (nonatomic,retain) NSString *_device_id; 
@property (nonatomic,retain) NSString *_api_key; 
@property (nonatomic,retain) NSString *_token; 

回答

3

您正在泄漏_responeresponse_error不必要地分配它们。你正在传递一个指向你的指针的指针,这个指针只会改变创建泄漏的指针。你也需要自动释放str_response

NSError *response_error = nil; //Do not alloc/init 
NSHTTPURLResponse *_response = nil; //Do not alloc/init 
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:&_response error:&response_error]; 
NSString *str_response = [[[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding] autorelease]; 
return [[str_response JSONValue] valueForKey:@"pairing"]; 
+0

很棒,就像一个魅力:) –

0

定义如果您呼叫分配/初始化,然后没有要求释放或自动释放,赔率是你会泄漏内存。

+0

但问题是在哪里以及如何发生的释放块,因为'NSAutorelease'块用'返回之前drain'权利没有得到正确处理泄漏,我手写释放造成内存访问错误。 –