iOS:GCD技术——仅仅执行一次和执行多次 dispatch_once和dispatch_apply

只执行一次  (多用于单例模式)

dispatch_once(dispatch_once_t *predicate, dispatch_block_t block);

dispatch_once_t *predicate:一个全局的变量      dispatch_block_t block:block函数块

多次执行

dispatch_apply(size_t iterations, dispatch_queue_t queue,void (^block)(size_t));

size_t iterations:执行次数      dispatch_queue_t queue:队列      void (^block)(size_t):block函数块

具体举例如下:

1、只执行一次时:

//自定义一个block函数块

//定义block
typedef void (^BLOCK)(void);

//将执行代码封装到block中
BLOCK myBlock = ^(){
    static int count = 0;
    NSLog(@"count=%d",count++);
};

//执行dispatch_once函数

//myblock调用
//myBlock();
//myBlock();

//只会执行一次,GCD once
static dispatch_once_t predicate;
dispatch_once(&predicate, myBlock);
dispatch_once(&predicate, myBlock);

//运行结果:虽然执行两次,只有一个输出

2015-10-07 22:54:34.279 04-GCD-once[3501:278570] count=0

2、多次执行时:

//自定义一个block函数

//定义block
typedef void (^BLOCK)(size_t);

//将函数封装到block
BLOCK myBlock = ^(size_t size){

    static int count = 0;
    NSLog(@"count=%d",count++);

};

//执行dispatch_apply

//GCD多次执行任务
dispatch_apply(5, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), myBlock);

//运行结果如下:执行了5次,有5个输出

2015-10-07 22:57:59.438 05-GCD-apply[3528:280053] count=0
2015-10-07 22:57:59.438 05-GCD-apply[3528:280093] count=2
2015-10-07 22:57:59.438 05-GCD-apply[3528:280094] count=3
2015-10-07 22:57:59.438 05-GCD-apply[3528:280095] count=1
2015-10-07 22:57:59.439 05-GCD-apply[3528:280053] count=4
时间: 2024-12-16 08:42:54

iOS:GCD技术——仅仅执行一次和执行多次 dispatch_once和dispatch_apply的相关文章

iOS多线程技术—GCD介绍

iOS多线程技术—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 3.提示 (1)GCD存在于libdispatch.dylib这个库中,

iOS多线程技术—GCD的用法

iOS多线程技术—GCD的用法 一.主队列介绍 主队列:是和主线程相关联的队列,主队列是GCD自带的一种特殊的串行队列,放在主队列中得任务,都会放到主线程中执行. 提示:如果把任务放到主队列中进行处理,那么不论处理函数是异步的还是同步的都不会开启新的线程. 获取主队列的方式: 1 // 2 // YYViewController.m 3 // 12-GCD的基本使用(主队列) 4 // 5 // Created by 孔医己 on 14-6-25. 6 // Copyright (c) 2014

【iOS开发-多线程】使用GCD创建多线程(iOS常用技术)

GCD 全称是Grand Central Dispatch 特点: 自动利用CPU的多核技术 自动管理线程的生命周期 使用步骤 定制任务 将任务添加队列 各类队列的特点 关于同步和异步的两种执行方式 /** * 同步方式执行任务,不管是什么队列,都不会再开一个线程 */ dispatch_sync(<#dispatch_queue_t queue#>, ^{ <#code#> }) /** * 异步方式执行任务,除了主队列都会开启一个新线程 */ dispatch_async(&l

iOS多线程技术---pthread、NSThread、NSOperationQueue、GCD

多线程技术 process进程:在系统中运行的一个应用程序:每个进程都是独立的:有专有的内存空间 thread线程:程序的一段执行序列,进程的不部分: 特点:1.进程只分配内存空间,并不执行任务 2.每个进程至少有一个线程,该线程叫做主线程 3.线程是进程的基本执行单元,进程的所有任务都是在线程中执行 4.每个线程中得任务的执行都是串行的 多线程并发:一个进程中多条线程并发执行任务: 特点:   1.提高程序的执行效率,提高资源利用率 2.同一时间,CPU只能处理一条线程 3.多线程并发时,CP

GCD技术小结

什么是 GCD GCD 是 libdispatch 的市场名称,而 libdispatch 作为 Apple 的一个库,为并发代码在多核硬件(跑 iOS 或 OS X )上执行提供有力支持.它具有以下优点: 1.GCD 能通过推迟昂贵计算任务并在后台运行它们来改善你的应用的响应性能. 2.GCD 提供一个易于使用的并发模型而不仅仅只是锁和线程,以帮助我们避开并发陷阱. 3.GCD 具有在常见模式(例如单例)上用更高性能的原语去优化你的代码的潜在能力. GCD 术语 Serial vs. Conc

iOS多线程技术

说明:开发技术大同小异,帖子写出来不是为了晒的,只是一个学习记录过程,有错误欢迎指正,喜欢喷人的请滚蛋. 一.实现方案 在iOS中有三种多线程实现技术,它们分别是NSThread.GCD .NSOperation. NSThread:基于OC编写,更加面向对象,可直接操作线程对象,需要程序员手动管理线程生命周期,开发中偶尔使用. GCD:基于c语言编写,旨在替代NSThread线程技术,能充分利用设备的多核,系统自动管理线程生命周期,开发中经常使用. NSOperation:底层基于GCD封装的

iOS GCD使用

Grand Central Dispatch(GCD)是异步执行任务的技术之一.一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需要定义想执行的任务并追加到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行任务.由于线程管理是作为系统的一部分来实现的,因此可统一管理,也可执行任务,这样就比以前的线程更有效率. Dispatch Queue Dispatch Queue是用来执行任务的队列,是GCD中最基本的元素之一. Dispatch Queue分为两种: S

iOS GCD的常见API使用指南

iOS GCD使用指南 Grand Central Dispatch(GCD)是异步执行任务的技术之一.一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需要定义想执行的任务并追加到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行任务.由于线程管理是作为系统的一部分来实现的,因此可统一管理,也可执行任务,这样就比以前的线程更有效率. Dispatch Queue Dispatch Queue是用来执行任务的队列,是GCD中最基本的元素之一. Dispatch

iOS 多线程技术1

iOS 多线程技术1 iOS 有三种多线程编程技术: NSThread NSOperation GCD 它们的抽象程度由低到高,越高的使用起来越简单. NSThread 显示调用 NSthread 类 类方法 + (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument; 实例方法 - (instancetype)initWithTarget:(id)target selecto