NSURLConnection-网络访问(同步异步)
/********访问网络同步请求、异步请求基本概念********/ // 访问网络的基本概念 访问网络方式: 同步请求 : 主线程执行 , 请求无法取消, 无法坚挺加载进度 异步请求 : 多线程执行 , 请求可以取消, 可以监听 // 访问网络的基本流程:(简略说明) 构造NSURL实例(地址) 生成NSURLRequest请求 通过NSURLConnection发送请求 通过返回NSURLRespond实例和NSError实例分析结果 接受返回数据 // NSURL释义与常用方法 NSURL实例包装了一个地址信息,可以是本地地址,也可以是远程地址 NSURL *url = [NSURL URLWithString:@"http://www.baidu.com:8080/search?id=1"]; /********NSURLRequest的使用********/ // NSURLRequest的使用 NSURLRequest包装了网络请求的信息。 NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60]; NSURLRequestUseProtocolCachePolicy参考-> // http://www.cnblogs.com/pengyingh/articles/2343083.html // NSMutableRequest的使用 相对于NSRequest,可以对请求信息重新设置 示例: NSMutableRequest *request [[NSMutableRequest alloc]init]; [request setURL:url]; // 设置请求方式get/post [request setHTTPMethod:@"POST"]; // 设置超时时间 [request setTimeoutInterval:60]; // 设置请求参数 [request setHTTPBody:_data]; // 设置请求头 [request setValue:@"tttt" forHTTPHeaderField:@"cookes"]; /********同步请求用法********/ //构造url NSURL *url = [NSURL URLWithString:@"http://www.iphonetrain.com"]; //创建一个请求对象 NSURLRequest *request = [NSURLRequest requestWithURL:url]; //响应 NSURLResponse *response; //发送同步请求,请求成功后返回数据 NSData *resultData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; // -------data转化为string------ NSString *dataString = [[NSString alloc]initWithData:resultData encoding:NSUTF8StringEncoding]; /********异步请求用法********/ // 第一种方式(代理方式) //发送异步请求 [NSURLConnection connectionWithRequest:request delegate:self]; //delegate 接受加载的数据 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [_data appendData:data]; } //delegate 数据加载完后调用 - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSString *dataString = [[NSString alloc]initWithData:_data encoding:NSUTF8StringEncoding]; } // 第二种方式(开辟一个子线程,结合创建多线程的多种方式) //启动一个新的线程加载数据 [self performSelectorInBackground:@selector(loadData) withObject:nil]; //loadData发送同步请求(发送一个普通的请求) - (void)loadData { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; NSURL *url = [NSURL URLWithString:request_url]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; //发送同步请求,获取数据data NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; //回到主线程调用方法 [self performSelectorOnMainThread:@selector(afterLoadData) withObject:stringData waitUntiDone:NO]; // 直到子线程任务完成 [pool release]; } /********取消异步请求********/ //发送cancel取消请求,同步请求无法取消。 //取消请求后,网络请求会按失败处理,会调用失败的代理 [request cancel];