iOS学习笔记-109.多线程08——CGD快速迭代

来源:互联网 发布:亚像素边缘提取算法 编辑:程序博客网 时间:2024/06/07 07:33

  • 多线程08CGD快速迭代
    • 一说明
    • 二for迭代
    • 三GCD的快速迭代
    • 四使用for迭代移动文件示例
      • 1 说明
      • 2 示例代码
      • 3 图示与结果
    • 五使用for迭代移动文件示例
      • 1 示例代码
      • 2 图示与结果

多线程08——CGD快速迭代

一、说明

使用 dispatch_apply 函数能进行快速迭代遍历

/*第一个参数:遍历的次数第二个参数:队列第三个参数:索引*/dispatch_apply(size_t iterations, dispatch_queue_t queue,        DISPATCH_NOESCAPE void (^block)(size_t));

示例

dispatch_apply(10, dispatch_get_global_queue(0, 0), ^(size_t index){    // 执行10次代码,index顺序不确定});

二、for迭代

使用for 和forin语句是一样的

/*传统的for迭代  同步*/-(void)forDemo{    for (int i=0; i<10; i++) {        NSLog(@"%zd------%@",i,[NSThread currentThread]);    }}

结果

[80195:457998] 0------<NSThread: 0x60800007ac00>{number = 1, name = main}[80195:457998] 1------<NSThread: 0x60800007ac00>{number = 1, name = main}[80195:457998] 2------<NSThread: 0x60800007ac00>{number = 1, name = main}[80195:457998] 3------<NSThread: 0x60800007ac00>{number = 1, name = main}[80195:457998] 4------<NSThread: 0x60800007ac00>{number = 1, name = main}[80195:457998] 5------<NSThread: 0x60800007ac00>{number = 1, name = main}[80195:457998] 6------<NSThread: 0x60800007ac00>{number = 1, name = main}[80195:457998] 7------<NSThread: 0x60800007ac00>{number = 1, name = main}[80195:457998] 8------<NSThread: 0x60800007ac00>{number = 1, name = main}[80195:457998] 9------<NSThread: 0x60800007ac00>{number = 1, name = main}

三、GCD的快速迭代()

示例代码

/*GCD迭代  异步*/-(void)applyDemo{    /*       第一个参数:遍历的次数       第二个参数:队列       第三个参数:index索引       */    dispatch_apply(10, dispatch_get_global_queue(0, 0), ^(size_t index) {        NSLog(@"%zd------%@",index,[NSThread currentThread]);    });}

结果

[80625:461035] 0------<NSThread: 0x608000071f40>{number = 1, name = main}[80625:461584] 1------<NSThread: 0x608000075780>{number = 6, name = (null)}[80625:461035] 4------<NSThread: 0x608000071f40>{number = 1, name = main}[80625:461586] 3------<NSThread: 0x60800007a9c0>{number = 7, name = (null)}[80625:461587] 2------<NSThread: 0x600000079a80>{number = 8, name = (null)}[80625:461035] 6------<NSThread: 0x608000071f40>{number = 1, name = main}[80625:461584] 5------<NSThread: 0x608000075780>{number = 6, name = (null)}[80625:461035] 9------<NSThread: 0x608000071f40>{number = 1, name = main}[80625:461587] 8------<NSThread: 0x600000079a80>{number = 8, name = (null)}[80625:461586] 7------<NSThread: 0x60800007a9c0>{number = 7, name = (null)}

四、使用for迭代移动文件示例

4.1 说明

移动文件我们可以按以下步骤操作

  1. 获取到源文件夹路径

  2. 获取到目的文件夹路径

  3. 获取源文件夹下的所有文件

  4. 移动文件到目的文件夹下

4.2 示例代码

/===================移动文件demo=================/*使用for循环*/-(void)moveFilesWithFor{    //1.源文件路径    NSString *from = @"/Users/qiwenming/Desktop/from";    //2.目的文件路径    NSString *to = @"/Users/qiwenming/Desktop/to";    //3.获取目录下的所有文件    NSArray * subPaths = [[NSFileManager defaultManager] subpathsAtPath:from];    //4.遍历然后移动文件    NSInteger count = subPaths.count;    for (int i=0; i<count; i++) {        //4.1拼接文件全路径        NSString *formFullPath = [from stringByAppendingPathComponent:subPaths[i]];        NSString *toFullPath = [to stringByAppendingPathComponent:subPaths[i]];        //4.2移动        [[NSFileManager defaultManager]moveItemAtPath:formFullPath toPath:toFullPath error:nil];        NSLog(@"%@-----%@----%@",formFullPath,toFullPath,[NSThread currentThread]);    }}

4.3 图示与结果

这里写图片描述

打印结果

2017-09-03 03:44:46.453 03_UIview83多线程GCD[82110:468582] /Users/qiwenming/Desktop/from/.DS_Store-----/Users/qiwenming/Desktop/to/.DS_Store----<NSThread: 0x600000072e00>{number = 1, name = main}2017-09-03 03:44:46.454 03_UIview83多线程GCD[82110:468582] /Users/qiwenming/Desktop/from/test1.png-----/Users/qiwenming/Desktop/to/test1.png----<NSThread: 0x600000072e00>{number = 1, name = main}2017-09-03 03:44:46.454 03_UIview83多线程GCD[82110:468582] /Users/qiwenming/Desktop/from/test2.png-----/Users/qiwenming/Desktop/to/test2.png----<NSThread: 0x600000072e00>{number = 1, name = main}2017-09-03 03:44:46.455 03_UIview83多线程GCD[82110:468582] /Users/qiwenming/Desktop/from/test3.png-----/Users/qiwenming/Desktop/to/test3.png----<NSThread: 0x600000072e00>{number = 1, name = main}2017-09-03 03:44:46.455 03_UIview83多线程GCD[82110:468582] /Users/qiwenming/Desktop/from/test4.png-----/Users/qiwenming/Desktop/to/test4.png----<NSThread: 0x600000072e00>{number = 1, name = main}2017-09-03 03:44:46.455 03_UIview83多线程GCD[82110:468582] /Users/qiwenming/Desktop/from/test5.png-----/Users/qiwenming/Desktop/to/test5.png----<NSThread: 0x600000072e00>{number = 1, name = main}2017-09-03 03:44:46.456 03_UIview83多线程GCD[82110:468582] /Users/qiwenming/Desktop/from/test6.png-----/Users/qiwenming/Desktop/to/test6.png----<NSThread: 0x600000072e00>{number = 1, name = main}2017-09-03 03:44:46.456 03_UIview83多线程GCD[82110:468582] /Users/qiwenming/Desktop/from/test7.png-----/Users/qiwenming/Desktop/to/test7.png----<NSThread: 0x600000072e00>{number = 1, name = main}2017-09-03 03:44:46.456 03_UIview83多线程GCD[82110:468582] /Users/qiwenming/Desktop/from/.DS_Store-----/Users/qiwenming/Desktop/to/.DS_Store----<NSThread: 0x600000072e00>{number = 1, name = main}

五、使用for迭代移动文件示例

5.1 示例代码

/*使用GCD迭代*/-(void)moveFilesWithApply{    //1.源文件路径    NSString *from = @"/Users/qiwenming/Desktop/from";    //2.目的文件路径    NSString *to = @"/Users/qiwenming/Desktop/to";    //3.获取目录下的所有文件    NSArray * subPaths = [[NSFileManager defaultManager] subpathsAtPath:from];    //4.遍历然后移动文件    NSInteger count = subPaths.count;    dispatch_apply(count, dispatch_get_global_queue(0, 0), ^(size_t i) {        //4.1拼接文件全路径        NSString *formFullPath = [from stringByAppendingPathComponent:subPaths[i]];        NSString *toFullPath = [to stringByAppendingPathComponent:subPaths[i]];        //4.2移动        [[NSFileManager defaultManager]moveItemAtPath:formFullPath toPath:toFullPath error:nil];        NSLog(@"%@-----%@----%@",formFullPath,toFullPath,[NSThread currentThread]);    });}

5.2 图示与结果

这里写图片描述

打印结果

2017-09-03 03:52:12.550 03_UIview83多线程GCD[83221:477841] /Users/qiwenming/Desktop/from/.DS_Store-----/Users/qiwenming/Desktop/to/.DS_Store----<NSThread: 0x60000007d940>{number = 1, name = main}2017-09-03 03:52:12.551 03_UIview83多线程GCD[83221:484973] /Users/qiwenming/Desktop/from/test1.png-----/Users/qiwenming/Desktop/to/test1.png----<NSThread: 0x600000268bc0>{number = 24, name = (null)}2017-09-03 03:52:12.551 03_UIview83多线程GCD[83221:484972] /Users/qiwenming/Desktop/from/test2.png-----/Users/qiwenming/Desktop/to/test2.png----<NSThread: 0x600000269640>{number = 25, name = (null)}2017-09-03 03:52:12.551 03_UIview83多线程GCD[83221:484974] /Users/qiwenming/Desktop/from/test3.png-----/Users/qiwenming/Desktop/to/test3.png----<NSThread: 0x6000002692c0>{number = 26, name = (null)}2017-09-03 03:52:12.551 03_UIview83多线程GCD[83221:477841] /Users/qiwenming/Desktop/from/test4.png-----/Users/qiwenming/Desktop/to/test4.png----<NSThread: 0x60000007d940>{number = 1, name = main}2017-09-03 03:52:12.551 03_UIview83多线程GCD[83221:484972] /Users/qiwenming/Desktop/from/test6.png-----/Users/qiwenming/Desktop/to/test6.png----<NSThread: 0x600000269640>{number = 25, name = (null)}2017-09-03 03:52:12.552 03_UIview83多线程GCD[83221:484973] /Users/qiwenming/Desktop/from/test5.png-----/Users/qiwenming/Desktop/to/test5.png----<NSThread: 0x600000268bc0>{number = 24, name = (null)}2017-09-03 03:52:12.552 03_UIview83多线程GCD[83221:484974] /Users/qiwenming/Desktop/from/test7.png-----/Users/qiwenming/Desktop/to/test7.png----<NSThread: 0x6000002692c0>{number = 26, name = (null)}
阅读全文
0 0
原创粉丝点击