多线程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 说明
移动文件我们可以按以下步骤操作
获取到源文件夹路径
获取到目的文件夹路径
获取源文件夹下的所有文件
移动文件到目的文件夹下
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)}