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的请求体上,增大了请求参数的安全性

 

原文地址:https://www.cnblogs.com/IOS-Developer/p/4121390.html