访问网络的方式
同步请求:数据的请求过程是在主线程来执行的.网络数据加载需要一个实践过程,这样的话就回堵塞主线程.
异步请求:数据的请求过程在多线程来执行.
同步请求无法取消,异步请求过程中可以取消.同步请求无法监听加载进度,异步可以监听.
foundation框架 中访问网络的基本流程
构造NSURL实例(地址)
生产NSURLRequest请求
通过返回NSURLRespond实例和NSError实例分析结果
接受返回数据
NSURL释义与常用方法
NSURL实例包装了一个地址信息,可以是本地地址,也可以是远程地址
-常用方法
// 初始化URL实例
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com:8080/search?id=1"];
NSLog(@"Scheme: %@", [url scheme]); //http [skiːm] n.阴谋;计划;方案
NSLog(@"Host: %@", [url host]); // www.baidu.com n.主人;主持人;主办方;大量;寄主;主机
NSLog(@"absoluteString: %@", [url absoluteString]); //http://www.baidu.com:8080/search?id=1 n.绝对的事物
NSLog(@"relativePath: %@", [url relativePath]); //search n.亲戚;[语]关系词
NSLog(@"Port: %@", [url port]); //8080 n.港口
NSLog(@"Path: %@", [url path]); //search
NSLog(@"Query: %@", [url query]); //id=1 n.疑问;质问;疑问号
-------------NSURLRequest的使用-------------
NSURLRequest 包装了网络请求信息
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com:8080/search?id=1"
// cachePolicy 缓存策略 timeoutInterval 超时时间 ['pɑːləsi] n.政策;方针 ['ɪntərvl] n.间隔;休息时间;(数学)区间;(音乐)音程
NSURLRequest *request = [NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
-------------NSMutableRequest的使用-------------
//构造url
NSURL *url =[NSURL URLWithString:@"http;//www.baidu.com"];
//创建一个请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLRequest *response;
//发送同步请求,请求成功后返回数据
NSData *resultData = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:nil];
NSString *dataString = [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding];
self.resulText.text = dataString;
//异步请求
//第一种方式
NSURL *url = [NSURL URLWithString:request_url];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//发送异步请求
[NSURLConnection connectionWithRequest:request delegate:self];
-[(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
[_data appendData:data];
}//接受加载的数据
-(void)connectionDidFinishLoading;(NSURLConnection *)connection{
NSString *dataString = [[NSString alloc] initWithData:_data
encoding:NSUTF8StringEncoding];
self.resultText.text = dataString;
} //数据加载完成以后调用
//异步请求
//第二种方式(开辟一个子线程)
-[(IBAction)asychroRequest:(id)sender{
[self performSelectorInBackground:@selector(loadData)
withObject:nil];
} //启动一个新的线程加载数据
-(void)loadData {
NSURL *url = [NSURL URLWithString:requestWithURL:url];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLResponse *response =nil;
//发送同步请求
NSData *data = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:nil];
NSString *srtingData = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
[self preformSelectorOnMainThread:@selector(afterLoadData:)
withobject:stringData waitUntiDone:NO];
}