zoukankan      html  css  js  c++  java
  • 同步下载 异步下载

    异步下载:支持应用程序在后台下载数据,在等待下载完成的过程中不会阻塞代码的运行

    同步下载:调用一个方法的时候,如果该方法的返回依赖于它的功能是否完成,则称该方法为同步方法。必须下载完成才能进行下一步。会出现卡壳现象。

    同步下载几种形式:

        NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"];  

    形式一:

        NSString  *str=[NSString  stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];

    形式二:

        NSData * _data =[NSData dataWithContentsOfURL:url]

    形式三:

        NSURLRequest *request=[NSURLRequest requestWithURL:url1];
    
        NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

         异步下载 :

       形式一:

        [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
            NSLog(@"------%d",data.length);
            [data writeToFile:path atomically:YES];
    

       形式二:

        首先挂出 协议<NSURLConnectionDataDelegate>

       定义全局变量:      

           NSMutableData *_totalData;
           long long _totalLength;

    //下载准备

    1   NSURL *url=[NSURL URLWithString:@"http://class.room/hdmv.mp4"];
    2     NSURLRequest *request=[NSURLRequest requestWithURL:url];
    3     NSURLConnection *connection=[[NSURLConnection alloc] initWithRequest:request delegate:self];
    4     [connection start];

    //实现协议里的方法

    //1. 先接受到响应信息,能够知道等下接受的数据是什么样的
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    {
        //数据有多大
        _totalLength = response.expectedContentLength;
    }
    
    //NSFileHandle
    
    //2. 分次接受数据
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    {
    
        [_totalData appendData:data];
      
    }
    
    //3. 下载完成
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection
    {
        NSLog(@"finished...");
    
    }

    形式二的异步下载还可以以用下图表示:

    但是用于多个数据,多个内容下载,机会出现混乱了。所以可以把这个下载方法封装起来,下载几个数据,就用几个对象来下载就可以了。不会出现混乱了。

      

  • 相关阅读:
    ArrayList用法
    Delegate比较全面的例子(原创)
    一个登陆页面,包含了初始化用户,输入检测,错误处理等
    C#线程 在某一时间内,只有N个线程在并发执行,其余都在队列中的实现
    ASP.Net防止刷新自动触发事件的解决方案
    存储过程编写经验和优化措施 (转)
    [转]数据库开发21条军规
    [转]Ajax简单客户登陆验证
    用SqlBulkCopy进行大批量数据迁移
    什么时候使用哪个数据绑定控件(asp.net)
  • 原文地址:https://www.cnblogs.com/lucan727/p/3916593.html
Copyright © 2011-2022 走看看