GCD的快速迭代

2019-05-24  本文已影响0人  大风天上来

GCD的快速迭代

通常我们进行遍历, 都是使用的for循环或者while循环

但是, 普通的循环, 是在主线程中执行的
如果循环次数过多的话, 就会影响主线程的执行, 会导致UI界面的卡顿, 从而降低用户的体验

GCD快速迭代(遍历)

格式:

dispatch_apply(<#size_t iterations#>, <#dispatch_queue_t queue#>, <#^(size_t)block#>)
+ <#size_t iterations#>: 进行迭代的次数
+ <#dispatch_queue_t queue#>: 迭代执行的队列
+ <#^(size_t)block#>: 进行迭代的代码, 注意要在block中设置一个索引i, 用来控制迭代

迭代的注意点

使用场景

- (void)testMoveFile {
    NSString *fromPath = @"/Users/hufeng/Desktop/222";
    NSString *toPath = @"/Users/hufeng/Desktop/111";
    
    NSArray *fileArray = [[NSFileManager defaultManager] subpathsAtPath:fromPath];
    NSLog(@"%@", fileArray);
    
    dispatch_queue_t queue = dispatch_queue_create("123", DISPATCH_QUEUE_CONCURRENT);
    
    dispatch_apply(fileArray.count, queue, ^(size_t i) {
        NSString *fullFromPath = [fromPath stringByAppendingPathComponent:fileArray[i]];
        NSString *fullToPath = [toPath stringByAppendingPathComponent:fileArray[i]];
        
        [[NSFileManager defaultManager] moveItemAtPath:fullFromPath toPath:fullToPath error:nil];
        
        NSLog(@"%@ --- %@ --- %@", fullFromPath, fullToPath, [NSThread currentThread]);
        
    });
}

链接:https://www.jianshu.com/p/bbf03a158c37

上一篇 下一篇

猜你喜欢

热点阅读