IOS网络编程
IOS网络编程
目录
- 概述——对IOS网络编程的理解
- 使用苹果官方库进行网络请求
概述——对IOS网络编程的理解
使用苹果官方库进行网络请求
NSURLConnection
同步GET方法
NSString *urlStr = [NSString stringWithFormat:@"http//localhost/MyWorkProcession.php?method=login&std_ID=123&password=123];
NSURL *url = [NSURL URLWithString:urlStr];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
//网络请求回来的应答数据
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *response_str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
注:使用同步GET方法进行请求,优点是在网络条件非常良好的情况下运行效率高,不会因为在不同线程间进行切换降低了程序的运行效率,当然缺点也很明显,用户体验比较差,在进行网络请求时,程序不能响应用户的其他操作,而且如果在网络条件比较差的条件下,用户的等待时间是非常久的,GET方法直接把参数暴露在url上,是比较不安全的请求方式,对于没那么重要的请求信息可以使用GET方法
异步POST方法
NSURL *url = [NSURL URLWithString:urlStr];
NSString *postValue = [NSString stringWithFormat:@"method=login&std_ID=123&password=123];
NSData *postData = [postValue dataUsingEncoding:NSUTF8StringEncoding];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:postData];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if(connection){
_datas = [NSMutableData new];
}
需要实现的NSURLConnectionDelegate and NSURLConnectionDataDelegate
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
[_datas appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
NSLog(@"%@",[error localizedDescription]);
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
//对_datas的处理
}
注:使用异步的网络请求,虽然增加了CPU在调度之间的开销,但是获得了更好的用户体验,可以响应用户的其他操作,POST方法把请求参数封装到request的请求体上,增大了请求参数的安全性