object-c 网络(中)

来源:互联网 发布:vb中怎么加密输入 编辑:程序博客网 时间:2024/06/13 05:43

iPhone网络开发中级-同步 异步开发

 

     在网络开发中,你会经常碰到同步和异步的问题,什么时候用同步什么时候用异步,这个就不多说了。我主要说下,在移动开发(iphone中)同步和异步

首先我说说最原始的方式来解决同步和异步的问题。所谓最原始的方式,就是步借助其他的一些开源的框架,来达到放送同步和异步的方式。

     1:异步的方式

          NSMutableData * data=[NSMutableData alloc]initWhthLength:0];

          创建可变数据

              NSMutableURLRequest *request=[[NSMutableURLRequestalloc]initWithURL:urlcachePolicy:NSURLRequestReloadIgnoringCacheDatatimeoutInterval:60];

         NSURLConnection *connection=[[NSURLConnectionalloc]initWithRequest:requestdelegate:self];

       [request setHTTPMethod:@"GET"];

     创建一个请求

     下面就是一些响应的方法,当你请求发出后,你要做出一些回应,那就需要一下异步响应的一下方法。在异步中最主要的有这个几个方法

     第一个:收到响应后触发的请求 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

     第二个:每次受到数据就会触发的方法:-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 可以对数据进行出来

     第三个:当请求发生错误会触发的方法:-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

     第四个:当全部数据接收完成就会触发的放法:-(void)connectionDidFinishLoading:(NSURLConnection *)connection

     异步知道了,那同步就会简单很多,下面就来了解下同步的机制和方法。

    

     2:同步的方式

          不管是同步还是异步,都要发送一个请求这个是必然的,没有请求就没有数据。

       NSMutableURLRequest *request=[[NSMutableURLRequestalloc]initWithURL:urlcachePolicy:NSURLRequestReloadIgnoringCacheDatatimeoutInterval:60];

       请求都是一样的

       设置url: [request setURL:[NSURLURLWithString:url]];

       设置http请求的方式 [request setHTTPMethod:@"GET"];

          NSData *data111=[NSURLConnection sendSynchronousRequest:request returningResponse:response error:error]; 

        [request release];

  以上这些就是最原始的同步和异步的请求。下面我们要介绍的是用开源框架库:ASIHTTPRequest来实现同步和异步的方法。

    

     1:同步的方式

       构建url的方式都是一样的,这里我就不多写了。

       在使用ASIHTTPRequest方式的时候要构造其对象。并且发送同步请求

         ASIHTTPRequest * ashttpRequest=[ASIHTTPRequestrequestWithURL:url];

        [ashttpRequest startSynchronous];

        NSError * error=[ashttpRequesterror]; //错误的数据

        NSString * returnStr=[ashttpRequestresponseString];//返回成功后的数据

     2:异步的请求

       ASIHTTPRequest *asiHttpRequest=[ASIHTTPRequestrequestWithURL:url];

        [asiHttpRequest setDelegate:self];

        [asiHttpRequest startSynchronous];

 

     以上这些和同步的区别不是太大,就多了一个设定委托代理的方式。其实异步就是用这个进行实现的。在异步中最主要的方法就是一个接收数据的方法和一个失败的方法。下面就是这2个方法

 

       -(void)requestFinished:(ASIHTTPRequest *)request{}

     这个就是请求结束后,获得的一些response数据的方法,你就可以对这些数据进行组装。当失败了就会调下面的方法。

    

       -(void)requestFailed:(ASIHTTPRequest * )request{}

      这个就是请求失败,获得失败的数据(error)

 当你看了上面2种请求方式,你就会在你的平时的代码中,灵活的运用。在用2种框架的方式去实现那2种请求的时候,不能说哪一种好,哪一种不好。你要根据你的需要进行选择。希望这些对你们有些帮助。
原创粉丝点击