IOS开发(64)之GCD任务最多只执行一次

1 前言

使用 dispatch_once 函数 在 APP 的生命周期内来保证你想确保每段代码只执行一次,即使它在代码的不同地方多次调用(比如单例的初始化)。

2 代码实例

ZYAppDelegate.m

[plain]

/一个用于调度一次函数的标识

static dispatch_once_t onceToken;

//Block Object

void (^executedOnlyOnce)(void) = ^{

static NSUInteger numberOfEntries = 0;

numberOfEntries++;

NSLog(@"Executed %lu time(s)", (unsigned long)numberOfEntries);

};

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

//声明一个队列

dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

//执行一次的队列

dispatch_once(&onceToken, ^{ dispatch_async(concurrentQueue,

executedOnlyOnce);

});

dispatch_once(&onceToken, ^{ dispatch_async(concurrentQueue,

executedOnlyOnce);

});

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

// Override point for customization after application launch.

self.viewController = [[[ZYViewController alloc] initWithNibName:@"ZYViewController" bundle:nil] autorelease];

self.window.rootViewController = self.viewController;

[self.window makeKeyAndVisible];

return YES;

}

//一个用于调度一次函数的标识

static dispatch_once_t onceToken;

//Block Object

void (^executedOnlyOnce)(void) = ^{

static NSUInteger numberOfEntries = 0;

numberOfEntries++;

NSLog(@"Executed %lu time(s)", (unsigned long)numberOfEntries);

};

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

//声明一个队列

dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

//执行一次的队列

dispatch_once(&onceToken, ^{ dispatch_async(concurrentQueue,

executedOnlyOnce);

});

dispatch_once(&onceToken, ^{ dispatch_async(concurrentQueue,

executedOnlyOnce);

});

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

// Override point for customization after application launch.

self.viewController = [[[ZYViewController alloc] initWithNibName:@"ZYViewController" bundle:nil] autorelease];

self.window.rootViewController = self.viewController;

[self.window makeKeyAndVisible];

return YES;

}

ZYViewController.m

[plain]

- (void)viewDidLoad

{

[super viewDidLoad];

ZYMySingleton *test = [[ZYMySingleton alloc] init];

//循环单例方法

for (int i=0; i<5; i++) {

[test sharedInstance];

}

[test release];

}

- (void)viewDidLoad

{

[super viewDidLoad];

ZYMySingleton *test = [[ZYMySingleton alloc] init];

//循环单例方法

for (int i=0; i<5; i++) {

[test sharedInstance];

}

[test release];

}

ZYMySingleton.m

[plain] view plaincopyprint?- (id) sharedInstance{

static ZYMySingleton *SharedInstance = nil;

//一个用于调度一次函数的标识

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

SharedInstance = [ZYMySingleton new];

NSLog(@"SharedInstance is ======>%@",SharedInstance);

});

return SharedInstance;

}

- (id) sharedInstance{

static ZYMySingleton *SharedInstance = nil;

//一个用于调度一次函数的标识

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

SharedInstance = [ZYMySingleton new];

NSLog(@"SharedInstance is ======>%@",SharedInstance);

});

return SharedInstance;

}

运行后控制台显示结果

iOS延时执行的四种方法

@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

测试框架Unitest的运行原理,以及多个测试类中的执行顺序以及简化方法

单元测试单元测试(unit testing)是指对软件中的最小可测试单元进行检查和验证.对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一 ...

ajax多次请求,只执行最后一次的方法

ajax多次请求,只执行最后一次的方法 有时候点击按钮进行异步请求数据的时候可能网络差,用户会点击很多次,或者页面有很多相同的按钮,参数不同,但是调用的ajax相同,只想得到最后一次结果 我的思路是用 ...

ios想要取消执行延时调用的方法

想要取消执行延时调用的方法: [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(hideDia ...

IOS 后台执行

在IOS后台执行是本文要介绍的内容,大多数应用程序进入后台状态不久后转入暂停状态.在这种状态下,应用程序不执行任何代码,并有可能在任意时候从内存中删除.应用程序提供特定的服务,用户可以请求后台执行时间 ...

UIViewController的生命周期及iOS程序执行顺序

UIViewController的生命周期及iOS程序执行顺序     当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序1. alloc                         ...

【iOS 开发】Objective - C 面向对象 - 方法 &vert; 成员变量 &vert; 隐藏封装 &vert; KVC &vert; KVO &vert; 初始化 &vert; 多态

一. Objective-C 方法详解 1. 方法属性 (1) OC 方法传参机制 Object-C 方法传参机制 : OC 中得参数传递都是值传递, 传入参数的是参数的副本; -- 基本类型 (值传 ...

iOS微信实现第三方登录的方法

这篇文章主要介绍了iOS微信第三方登录实现的全过程,一步一步告诉大家iOS微信实现第三方登录的方法,感兴趣的小伙伴们可以参考一下   一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2 ...

iOS控制器与视图加载方法

转载记录, 请看原文: 1. iOS中的各种加载方法(initWithNibName,loadNibNamed,initWithCoder,awakeFromNib等等)简单使用   http://w ...

随机推荐

Vue 入门指南

英文:http://vuejs.org/guide/index.html 介绍 vue.js 是用来构建web应用接口的一个库 技术上,Vue.js 重点集中在MVVM模式的ViewModel层,它连 ...

【转载】 python修饰符&commat;

@符号在python语言中具有特殊含义,用来作为修饰符使用, @修饰符有点像函数指针,python解释器发现执行的时候如果碰到@修饰的函数,首先就解析它,找到它对应的函数进行调用,并且会把@修饰下面一 ...

未能进入中断模式,原因如下:源文件&OpenCurlyDoubleQuote;XXXXXX”不属于正在调试的项目。

这个问题是由于项目文件位置变动导致的.提示框已经说的比较清楚了. 首先可以尝试[重新生成] ,一般可以解决这个问题了. 我遇到的情况是,设置配置时,不小心取消了生成选择. 所以打开配置管理器,把相关的 ...

key 限制字符的输入

//限制字符的输入 { 只能输入以下字符 } procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);begin  If (Key ...

【HDU 5808】 Price List Strike Back (整体二分&plus;动态规划)

Price List Strike Back There are nn shops numbered with successive integers from 11 to nn in Bytelan ...

sql server版本、组件和管理工具

以下信息由何问起收集,希望有帮助. SQL Server 版本 定义 Enterprise 作为高级版本, SQL Server Enterprise 版提供了全面的高端数据中心功能,性能极为快捷.虚 ...

sqlserver 导入数据出现 无法创建 OLE DB 取值函数。请查看列元数据是否有效

我用的是Sql Server 的导入导出功能来实现的,但是有些数据可以导进去,有些就不行.总是出现一些错误! 执行之前 (错误)消息错误 0xc0202005: 数据流任务: 在数据源中找不到列“Un ...

FreeSWITCH快速录音

一.背景 测试人员反映FreeSWITCH录音不及时,需要大约5秒的时间才能捕获到RTP流. 二.原因及解决 查了下资料,FreeSWITCH默认的录音参数配置是开启缓冲的, 即RTP流大小到达655 ...

Nginx的启动、停止、重启

启动 启动代码格式:nginx安装目录地址 -c nginx配置文件地址 例如: [root@LinuxServer sbin]# /usr/local/nginx/sbin/nginx -c /us ...

mysql查找数据库中是否已经存在某张表

Sql: select count(*) from information_schema.TABLES t where t.TABLE_SCHEMA ="数据库名" and t.T ...

c语言中执行一次的函数once,iOS只执行一次的方法相关推荐

  1. C语言中求字符串长度的函数my_strlen()的几种实现方法

    C语言中求字符串长度的函数的几种实现方法 1.最常用的方法是创建一个计数器,判断是否遇到'\0',不是'\0'指针就往后加一. int my_strlen(const char *str) {asse ...

  2. c语言常用数学函数大全查询,C语言数学函数 C语言中全部可用的数学函数有哪些?...

    导航:网站首页 > C语言数学函数 C语言中全部可用的数学函数有哪些? C语言数学函数 C语言中全部可用的数学函数有哪些? 相关问题: 匿名网友: /*--------------------- ...

  3. c语言中用于获取字符串长度的函数是,C语言中求字符串长度的函数的几种实现方法...

    C语言中求字符串长度的函数的几种实现方法 1.最常用的方法是创建一个计数器,判断是否遇到'\0',不是'\0'指针就往后加一. int my_strlen(const char *str) { ass ...

  4. C语言中的字符串转数字函数常见问题详解

    目录 C语言中的字符串转数字函数常见问题详解 字符串转整形 atoi函数 字符串转长整形 strtol函数, C语言中的字符串转数字函数常见问题详解 字符串转整形 atoi函数 函数原型: int a ...

  5. C# 中串口通信 serialport1.DataReceived 函数无法触发或者出发延时等等问题解决方法

    C# 中串口通信 serialport1.DataReceived 函数无法触发或者出发延时等等问题解决方法 参考文章: (1)C# 中串口通信 serialport1.DataReceived 函数 ...

  6. Python语言学习之字母D开头函数使用集锦:del、dict使用方法之详细攻略

    Python语言学习之字母D开头函数使用集锦:del.dict使用方法之详细攻略 目录 del.dict使用方法 del dict()    #创建字典 del.dict使用方法 del a=1,  ...

  7. c语言常用字符串处理函数6,【总结】C语言中常见的字符串处理函数

    ------------------------------------------------------------------------------------------- C语言中没有字符 ...

  8. 谈谈你对c语言中数据(各种常量,变量,函数参数,字符串)的存储认识,自考《高级语言程序设计》知识点总结(二)...

    2.1 C语言的数据类型 数据类型包含两方面的内容:数据的表示和对数据加工的操作.数据的全部可能表示构成数据类型的值的集合.数据全部合理的操作构成数据类型的操作集合. 在C语言中,把整型.实型和字符型 ...

  9. c语言静态函数调用静态变量_C语言中的静态变量和函数

    c语言静态函数调用静态变量 C中的静态变量 (Static Variables in C) Basically, when static variables are declared, they cr ...

最新文章

  1. 返回、取消与关闭的使用逻辑
  2. 电脑的发展史_互联网发展史 硅谷传奇之 IBM
  3. 特斯拉回应海南碰撞事故:地面湿滑 车主踩制动踏板幅度较轻
  4. 区块链现状:最初的炒作消退,将迎来大量新应用(第一部分)
  5. Win8:Setting
  6. 本博已停用,现在的博客是www.mutousay.com
  7. yuv420p 详解_YUV格式详解,图文详解YUV420数据格式
  8. OFD板式文档阅读器
  9. 阿拉伯数字转中国人民币大写字符串
  10. 【校招VIP】产品设计和思维考察之数值分析
  11. tensorboard侧视_如何调整侧视/后视镜(以及为什么需要3台显示器)
  12. mysql如何存储非结构化数据_数据库-数据存储-非结构化数据的存储方式
  13. 使用 npm shrinkwrap 来管理项目依赖
  14. 2020年9月份英语六级翻译-西游记
  15. Feedback(反馈)
  16. java反射底层原理。
  17. 《潮流时装设计——世界顶级时装CAD制板技巧》——1.1 什么是服装CAD
  18. win10安装的es设置自启动时报错Failed starting ‘elasticsearch-service-x64‘ service
  19. windows10任务栏透明度设置
  20. 学习前端技术都需要学哪些

热门文章

  1. 中西方对时间的差异_中西方时间观念差异 英文
  2. 首席架构师徐海峰眼中的架构和出色的架构师
  3. element表格实现树形全选_很实用!word中全选的快捷键介绍及使用方法
  4. 杨辉三角python_Python面试150题汇总,都是常问的面试题!
  5. combobox控件 如何把三角形放大_初中数学|全等三角形全部知识点总结
  6. [转载] python学习笔记
  7. 计算机网络中的传输协议是_计算机网络中的传输方式
  8. json转string示例_C.示例中的String.Insert()方法
  9. 电脑如何设置不休眠_电脑休眠了却没法唤醒?设置一下就好!
  10. html中电子邮件怎么写,谈html mailto(电子邮件)实际应用