zoukankan      html  css  js  c++  java
  • iPhone 开发 之 ASIHTTPRequest (二)

    How to use

    create asynchronous request

    添加一个同步request

    这是使用ASIHTTPRequest最简单的方法。发送一个startSynchronous消息。将在同一个进程中执行请求,在完成之后释放控制。

    通过error属性来察看问题。

    使用responseString可以得到string类型的response信息。

    responseData方法用来获取一个NSData对象,或者更大的文件。不要使用这个方法来获取二进制的数据。

    DownloadDestinationPath方法用来设置request,来下载到一个文件中。


    - (IBAction)grabURL:(id)sender

    {

    NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];

    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

    [request startSynchronous];

    NSError *error = [request error];

    if (!error) {

    NSString *response = [request responseString];

    }

    }


    注意:一般来说,使用异步请求优先于同步请求。当你从main进程中使用同步的ASIHTTPRequest。你的应用程序界面将会被锁住,并且,在这期间不能使用。

    同步request只是用于没有界面的应用程序,例如终端。或者你运行在一个单独的进程中,并且你对它进行维护。

    Creatingan asynchronous request

    创建一个异步request

    示例代码看起来干着同样的事情(或者理解为代码开起来是一样的),但是,request是在后台运行的


    - (IBAction)grabURLInBackground:(id)sender
    {
    NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request setDelegate:self];
    [request startAsynchronous];
    }   - (void)requestFinished:(ASIHTTPRequest *)request
    {
    // Use when fetching text data NSString *responseString = [request responseString];
      // Use when fetching binary data NSData *responseData = [request responseData];
    }
      - (void)requestFailed:(ASIHTTPRequest *)request
    {
    NSError *error = [request error];
    }




    注意,我们为request设置委托,这样,我们就可以接收消息,无论request完成了还是失败了。

    这是一个最简单的创建一个异步的request的方法,并且,它会运行在当前进程里。对于更复杂的情况,你可能想创建一个队列,我们可以覆盖下一个(youmight want to create your own queue, which is what we’ll covernext.这里翻译的非常勉强….英语差啊…);

    Using aqueue

    使用一个队列

    这个示例依然是做同样的事情,但是,我们将为我们的request添加一个NSOperationQueue对象。

    使用NSOperationQueue(或ASINetWorkQueue,见下面示例)将给你对异步request更多的控制。当使用队列的时候,只有确定数量的request可以同时运行。如果你添加的request超过了队列的maxConcurrentOperationCount属性,request将在其他request运行完了之后运行。


    - (IBAction)grabURLInTheBackground:(id)sender
    {
    if (![self queue]) {
    [self setQueue:[[[NSOperationQueue alloc] init] autorelease]];
    }

    NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request setDelegate:self];
    [request setDidFinishSelector:@selector(requestDone:)];
    [request setDidFailSelector:@selector(requestWentWrong:)];
    [[self queue] addOperation:request]; //queue is an NSOperationQueue
    }
    - (void)requestDone:(ASIHTTPRequest *)request
    {
    NSString *response = [request responseString];
    }
     
    - (void)requestWentWrong:(ASIHTTPRequest *)request
    {
    NSError *error = [request error];
    }


    在上面的示例中,'queue'是我们的控制器保留NSOperationQueue的产物。

    我们设置selectors,selectors将在request成功或者失败之后被执行。如果你不设置这些,将会调用默认的(requestFinished和requestFailed).


    以上内容翻译自http://allseeing-i.com/ASIHTTPRequest/How-to-use。翻译的不是很好,请大家多多包涵!

    转载请注明出处!

  • 相关阅读:
    Leetcode#117 Populating Next Right Pointers in Each Node II
    Leetcode#123 Best Time to Buy and Sell Stock III
    获取文件大小的方法
    内存映射
    git patch
    git cherry-pick
    关于extern的说明
    Linux如何查看与/dev/input目录下的event对应的设备
    如何在Linux下统计高速网络中的流量
    [: ==: unary operator expected 解决方法
  • 原文地址:https://www.cnblogs.com/chen1987lei/p/1682127.html
Copyright © 2011-2022 走看看