iOS 开发-多线程:GCD(四)

1.iOS中常见的延时执行的方法:

//调用NSObject的方法
[self performSelector:@selector(run) withObject:nil afterDelay:2.0];
// 2秒后再调用self的run方法

//使用GCD函数 NSEC_PER_SEC 宏定义:纳秒 10的九次方
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    // 2秒后执行这里的代码...
});

//使用NSTimer 参数repeats:是否重复,为YES时,就相当于一个计时器
[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(test) userInfo:nil repeats:NO];

2.GCD提供一个 代码只执行一次 的方法

// 使用dispatch_once函数能保证某段代码在程序运行过程中只被执行1次
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    // 只执行1次的代码(这里面默认是线程安全的)
});

注意:这个方法不能在懒加载中使用。假如在一个控制器有一个数组属性,懒加载中使用了这个 一次性代码 方法,那么对于两个不同的该控制器的对象,获取该数据属性时,第一个获取的是正确结果,第二个就是空。

3.GCD提供一个和for循环一样的 快速迭代方法 (对于针对大数据的循环,速度明显高于for循环,这是因为GCD的快速迭代可以开启子线程)

//使用dispatch_apply函数能进行快速迭代遍历
dispatch_apply(10, dispatch_get_global_queue(0, 0), ^(size_t index){
    // 执行10次代码,index顺序不确定,因为是并发执行
});

你可能感兴趣的:(iOS 开发-多线程:GCD(四))