1. ios延迟执行的几种方法
- [selfperformSelector:@selector(方法)withObject:nilafterDelay:2.0];
- [NSTimerscheduledTimerWithTimeInterval:2.0target:selfselector:@selector(方法)userInfo:nilrepeats:NO];
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)),dispatch_get_main_queue(), ^{
NSLog(@"");
});
gcd方式的优势:
可以控制在xx时间之后在哪个线程中执行。
2. GCD一次性代码:在程序的运行过程中只被执行一次
-(void)once
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSLog(@"一次性代码")
});
}
3.栅栏函数
注意:栅栏函数不能使用全局并发队列
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
dispatch_queue_t queue=dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
NSLog(@"test一,当前线程是%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"test二,当前线程是%@",[NSThread currentThread]);
});
dispatch_barrier_async(queue, ^{
NSLog(@"我是栅栏++++++++++++++++++++++++++++++++++++++++++++");
});
dispatch_async(queue, ^{
NSLog(@"test三,当前线程是%@",[NSThread currentThread]);
});
}
@end
4.GCD快速迭代
一共要传3个参数:
参数1; 次数
参数2: 队列(只能传并发队列,主队列会发生死锁 串行队列无作用)
参数3: 索引 index
转移文件夹内容代码
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self moveFileGCD];
}
-(void)moveFile
{
//1.获取文件夹地址
NSString *from =@"文件夹地址";
NSString *to=@"文件夹地址";
//获取目录下面的文件的路径
NSArray *subpaths = [[NSFileManager defaultManager]subpathsAtPath:from];
NSLog(@"内容:%@",subpaths);
//遍历所有的文件
NSInteger count=subpaths.count;
for (NSInteger i=0; i<count ; i++) {
//拼接文件的全路径
NSString *fullPath=[from stringByAppendingPathComponent:subpaths[i]];
NSString *toFullPath=[to stringByAppendingPathComponent:subpaths[i]];
[[NSFileManager defaultManager]moveItemAtPath:fullPath toPath:toFullPath error:nil];
NSLog(@"全路径:%@------------------全路径:%@-----------%@",fullPath,toFullPath,[NSThread currentThread]);
}
}
-(void)moveFileGCD
{
//1.获取文件夹地址
NSString *from =@"文件夹地址";
NSString *to=@"文件夹地址";
//获取目录下面的文件的路径
NSArray *subpaths = [[NSFileManager defaultManager]subpathsAtPath:from];
NSLog(@"内容:%@",subpaths);
NSInteger count=subpaths.count;
//创建并发队列
dispatch_queue_t quque=dispatch_queue_create("queue", DISPATCH_QUEUE_CONCURRENT);
dispatch_apply(count, quque, ^(size_t i) {
//拼接文件的全路径
NSString *fullPath=[from stringByAppendingPathComponent:subpaths[i]];
NSString *toFullPath=[to stringByAppendingPathComponent:subpaths[i]];
[[NSFileManager defaultManager]moveItemAtPath:fullPath toPath:toFullPath error:nil];
NSLog(@"全路径:%@------------------全路径:%@-----------%@",fullPath,toFullPath,[NSThread currentThread]);
});
}
@end