我对内存管理这个话题有疑问。当我创建一个
NSMutableURLRequest
并在方法返回应用程序崩溃后释放它。
如果我删除NSMutableURLRequest
上发布的行,则该应用程序可以正常运行。但它让内存泄漏。
出了什么问题?
这是代码:
- (NSString *) callServerWhaitReturn {
NSMutableURLRequest * theRequest = [ NSMutableURLRequest requestWithURL: [NSURL URLWithString: self.internalUrl] cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 60.0];
[theRequest setHTTPMethod: @"POST"];
[theRequest setHTTPBody:[[NSString stringWithFormat:@"p1=%@", self.parameters] dataUsingEncoding: NSASCIIStringEncoding]];
NSURLResponse * response;
NSError * error;
NSData * result = [NSURLConnection sendSynchronousRequest: theRequest returningResponse: &response error: &error];
NSString * toReturn = [[[NSString alloc] initWithData: result encoding:NSASCIIStringEncoding] autorelease];
NSLog(@"%@", toReturn );
[theRequest release];
if (response) {
[response release];
}
if (result) {
[result release];
}
[toReturn autorelease];
return toReturn;
}
答案 0 :(得分:4)
requestWithURL:cachePolicy:timeoutInterval:
返回一个自动释放的对象。如果你没有保留它,你就不应该发布它。
答案 1 :(得分:1)
NSMutableURLRequest * theRequest = [ NSMutableURLRequest requestWithURL: [NSURL URLWithString: self.internalUrl] cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 60.0];
是一个自动释放的对象。你不能release
它。您必须分配对象并获取所有权,然后才应release
它。如果你想release
,那么allocate
像这样的对象
NSMutableURLRequest * theRequest = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: self.internalUrl] cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 60.0];
答案 2 :(得分:0)
您无法释放theRequest
,因为您没有分配它。
请从代码中删除以下语句。
[theRequest release];
使用initWithURL
的{{1}}方法。