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快速迭代

    普通for循环遍历数据 使用for循环遍历数据,是同步的, 串行的 GCD快速迭代: 开子线程和主线程一起完成遍历...

  • iOS面试--GCD常见用法

    项目中常见的GCD用法有已下几种: 1.GCD栅栏函数2.GCD快速迭代(遍历)3.GCD队列组的使用 1.GCD...

  • GCD-快速迭代

    /* 第一个参数:遍历的次数 第二个参数:队列(要使用并发队列,主队列会发生死锁,串行队列将无效果) ...

  • GCD的快速迭代

    GCD的快速迭代 通常我们进行遍历, 都是使用的for循环或者while循环 但是, 普通的循环, 是在主线程中执...

  • GCD相关方法

    1.gcd栅栏函数 2.gcd快速迭代方法(dispatch_apply)同for循环做比较。 案例:将文件夹fr...

  • GCD

    GCD之dispatch_apply dispatch_apply的作用是快速迭代 dispatch_apply替...

  • iOS GCD的快速迭代

    -(void)forDemo{//同步for(NSIntegeri =0; i<10; i++) {NSLog(@...

  • 五. GCD的快速迭代

    GCD的快速迭代 通常我们进行遍历, 都是使用的for循环或者while循环但是, 普通的循环, 是在主线程中执行...

  • GCD 快速迭代 dispatch_apply

    dispatch_apply函数通常在并发队列中使用。 控制台输出: 这个函数真正使用场景暂时还没有遇到,暂时先搁...

  • GCD 之快速迭代(dispatch_apply)

    dispatch_apply 快速迭代 类似 for 循环,但是在并发队列的情况下 dispatch_apply ...

网友评论

    本文标题:GCD快速迭代

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