GCD快速迭代

普通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 *)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快速迭代)