GCD快速迭代

作者: lyonLiu | 来源:发表于2016-09-23 00:26 被阅读59次

    普通for循环遍历数据

    使用for循环遍历数据,是同步的, 串行的

    for (NSInteger i = 0; i < 10; i++)
     {
        NSLog(@"%zd ---- %@",i,[NSThread currentThread]);
    }
    

    GCD快速迭代:

    开子线程和主线程一起完成遍历任务,任务的执行是并发的

     /**
      第一个参数:遍历次数
      第一个参数:队列(必须是并发队列)
      第一个参数:index 索引
      */
    dispatch_apply(100000, dispatch_get_global_queue(0, 0), ^(size_t index) {
        NSLog(@"%zd ---- %@",index,[NSThread currentThread]);
    });
    

    示例代码:以移动文件案例为主

    #import "ViewController.h"
    
    @implementation ViewController
    
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        [self movefile];
    }
    // 使用for循环
    - (void)movefile
    {
        // 1.拿到文件路径
        NSString *fromPath = @"/Users/liuzhiyuan/Desktop/from";
        // 2.获得目标文件路径
        NSString *toPath = @"/Users/liuzhiyuan/Desktop/to";
        // 3.得到目录下面的所有文件
        NSFileManager *fileManager = [NSFileManager defaultManager];
        
        NSArray *subPaths = [fileManager subpathsAtPath:fromPath];
        
        NSLog(@"%@",subPaths);
        // 4.遍历所有文件,然后执行剪切操作
        NSInteger count = subPaths.count;
          
        for (NSInteger index = 0; index < count; index++) {
            // 4.1拼接文件全路径
            NSString *fullPath = [fromPath stringByAppendingPathComponent:subPaths[index]];
            NSLog(@"%@",fullPath);
            
            NSString *toFullPath = [toPath stringByAppendingPathComponent:subPaths[index]];
            // 4.2剪切操作
            [fileManager moveItemAtURL:[NSURL fileURLWithPath:fullPath] toURL:[NSURL fileURLWithPath:toFullPath ] error:nil];
            
        }
    }
    // 使用GCD快速迭代
    - (void)moveGCDfile
    {
        // 1.拿到文件路径
        NSString *fromPath = @"/Users/liuzhiyuan/Desktop/from";
        // 2.获得目标文件路径
        NSString *toPath = @"/Users/liuzhiyuan/Desktop/to";
        // 3.得到目录下面的所有文件
        NSFileManager *fileManager = [NSFileManager defaultManager];
        
        NSArray *subPaths = [fileManager subpathsAtPath:fromPath];
        
        NSLog(@"%@",subPaths);
        // 4.遍历所有文件,然后执行剪切操作
        NSInteger count = subPaths.count;
        
        dispatch_apply(count, dispatch_get_global_queue(0, 0), ^(size_t index) {
            // 4.1拼接文件全路径
            NSString *fullPath = [fromPath stringByAppendingPathComponent:subPaths[index]];
            NSLog(@"%@",fullPath);
            
            NSString *toFullPath = [toPath stringByAppendingPathComponent:subPaths[index]];
            // 4.2剪切操作
            [fileManager moveItemAtURL:[NSURL fileURLWithPath:fullPath] toURL:[NSURL fileURLWithPath:toFullPath ] error:nil];
            
        });
    }
    @end
    

    相关文章

      网友评论

        本文标题:GCD快速迭代

        本文链接:https://www.haomeiwen.com/subject/jybgettx.html