connectionDidFinishLoading中的连接释放方法会导致错误
问题描述:
测试请求并在官方Apple开发人员网站中获取响应示例。connectionDidFinishLoading中的连接释放方法会导致错误
使用[连接释放]方法connectionDidFinishLoading, 导致错误:应该已经失效 - EXC_BAD_ACCESS
如果我评论线[连接释放]的方法;一切似乎工作,但 恐怕有内存泄漏发生,因为不存在的连接释放。
什么可能导致或我该如何避免此问题?
@imlementation test
NSMutableData *dataStore=nil;
//example usage:
//[self registerToServer:@"http://testserver.com/registeruser.ashx" withUserName:@"john doe" withPassword:@"123456"];
-(void)registerToServer:(NSString*)urlstr withUserName:(NSString*)
ausername withPassword:(NSString*)apassword
{
NSURL *url=[NSURL URLWithString:urlstr];
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url cachePolicy:NSURLCacheStorageNotAllowed timeoutInterval:3.0f];
[request setHTTPMethod:@"POST"];
[request setValue:ausername forHTTPHeaderField:@"pass"];
[request setValue:apassword forHTTPHeaderField:@"username"];
NSURLConnection *connection=[NSURLConnection connectionWithRequest:request delegate:self];
[connection start];
if(connection)
dataStore=[[NSMutableData data]retain];
}
- (无效)连接:(NSURLConnection的*)连接didReceiveData:(NSData的*)数据 { [数据存储区appendData:数据]; }
- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[dataStore setLength:0];}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"connection failed:%@ %@",
[error localizedDescription],
[[error userInfo]objectForKey:NSURLErrorFailingURLStringErrorKey]);
[connection release];
[dataStore release];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
//[connection release]; //WELL... I CANT COMMENT OUT THIS LINE!
NSString *res=[[NSString alloc]initWithData:dataStore encoding:NSUTF8StringEncoding];
NSLog(@"%@",res);
[dataStore release];
}
答
您使用工厂方法创建连接。如果您使用alloc/init
,new
,copy
或retain
,则应使用release
。在这种情况下,系统将负责为您释放物体。
更好的是,使用ARC。
你如何创建'NSURLConnection'实例? –
用NSURLConnection实例创建更新的问题。 使用简单的CustomNSObject的单例实例。 谢谢。 –