我已经完成了代码的和平,我已经指定了泄漏线。由于我是iPhone开发的新手,我无法理解该系列的实际问题。请看看那条线并告诉我。
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
//take away
//NSURL *url1 = [[NSURL alloc] initWithString:@"http://url/Service.asmx/takeAwayList"];
NSURL *url1 = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"%@/Service.asmx/takeAwayList",serviceURL]];
NSMutableURLRequest* request1=[NSMutableURLRequest requestWithURL:url1];
[request1 setHTTPMethod:@"POST"];
[request1 setTimeoutInterval:10];
//*****the leaky line***********************///
NSData *data2=[[NSURLConnection sendSynchronousRequest:request1 returningResponse:nil error:nil] autorelease];
if(data2 == nil)
{
UIAlertView* alert = [[UIAlertView alloc]initWithTitle:@"Alert" message:@"The network is not available.\n Please check the Internet connection." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
else
{
NSXMLParser *xmlParser1 = [[NSXMLParser alloc] initWithData:data2];
//Initialize the delegate.
TakeAwayParser *takeAwayParser = [[TakeAwayParser alloc] initTakeAwayParser];
//Set delegate
[xmlParser1 setDelegate:takeAwayParser];
//Start parsing the XML file.
@try {
BOOL success = [xmlParser1 parse];
if(success)
NSLog(@"No Errors");
else
NSLog(@"Error Error Error!!!");
}
@catch (NSException * e) {
NSLog(@"Exception in parsing %@ %@",[e name], [e reason]);
}
[takeAwayParser release];
[xmlParser1 release];
}
//[request1 release];
// [response1 release];
//
[url1 release];
// [data2 release];
//new arrivals
//[data2 release];
[pool release];
答案 0 :(得分:2)
我的大型项目也存在问题。在与Apple工程师一起试图找到漏洞后,他终于向NSURLConnection背后的主要Apple开发团队询问了问题。他们基本上说在NSURLConnection中有一个内部缓存根本无法清除,这是一个已知的问题。
所以我开始寻找替代方案。我发现了ASIHTTPConnection(链接如下),它起作用于CFNetwork。它被设计成NSURLConnection的直接替代品,加上一堆其他令人敬畏的好东西,比如下载到磁盘而不是内存,下载恢复,进度条回调等等。
我在所有项目中都使用过它,从未遇到任何问题或投诉。答:回答你的问题,这就是我如何摆脱那些内存泄漏。
答案 1 :(得分:1)
这条线没有泄漏,你甚至不应该自动释放它。
帮自己一个忙,阅读Apple开发人员文档中的内存管理指南,评论出代码中的版本并不是好兆头。
编辑:嗯我接受你的代码完全没问题,除了那一行。你确定它在泄漏吗?它返回一个保留计数为0的对象,因此你自动释放它应该会导致麻烦,因为它的保留计数为0。