IOS:利用dispatch_once创建单例
在之前有一篇学习笔记中,记载了一篇如何在OC中实现单例的文章:《IOS学习笔记4—Objective C—创建单例》自苹果引入了Grand Central Dispatch (GCD)(Mac OS 10.6和iOS4.0)后,创建单例又有了新的方法,那就是使用dispatch_once函数,当然,随着演进的进行,还会有更多的更好的方法出现。今天就来简要介绍下如何利用dispatch_once创建单例。
在开发中我们会用到NSNotificationCenter、NSFileManager等,获取他们的实例通过[NSNotificationCenter defaultCenter]和[NSFileManager defaultManager]来获取,其实这就是单例。
我们先看下函数
void dispatch_once( dispatch_once_t *predicate, dispatch_block_t block);
其中第一个参数predicate,该参数是检查后面第二个参数所代表的代码块是否被调用的谓词,
第二个参数则是在整个应用程序中只会被调用一次的代码块。dispach_once函数中的代码块只会被执行一次,而且还是线程安全的。
接下来我们来实现自己的单例,这里有一个SchoolManager类,为这个类实现单例
- +(SchoolManager *)sharedInstance
 - {
 - static SchoolManager *sharedManager;
 - static dispatch_once_t onceToken;
 - dispatch_once(&onceToken, ^{
 - sharedManager = [[SchoolManager alloc] init];
 - });
 - return sharedManager;
 - }
 
到目前为止,我们就实现了一个单例,一切就搞定了,是不是很简单!
使用就按照如下方式获取唯一实例即可:
- SchoolManager *schoolManager = [SchoolManager sharedInstance];
 
以上就简单介绍了使用dispatch_once函数实现单例的方法,欢迎大家补充并讨论!
IOS:利用dispatch_once创建单例的更多相关文章
- IOS基础学习日志(七)利用dispatch_once创建单例及使用
		
自苹果引入了Grand Central Dispatch (GCD)(Mac OS 10.6和iOS4.0)后,创建单例又有了新的方法,那就是使用dispatch_once函数,当然,随着演进的进行. ...
 - 利用dispatch_once创建单例
		
无论是爱还是恨,你都需要单例.实际上每个iOS或Mac OS应用都至少会有UIApplication或NSApplication. 什么是单例呢?Wikipedia是如此定义的: 在软件工程中,单例 ...
 - iOS 转载一篇利用dispatch_once创建单例的文章
		
感谢文章原作者,http://bj007.blog.51cto.com/1701577/649413
 - IOS 使用dispatch_once 创建单例
		
+ (instantClass *)sharedClient { static instantClass *_sharedClient = nil; static dispatch_once_t on ...
 - 使用GCD的dispatch_once创建单例
		
使用GCD的dispatch_once创建单例 介绍了创建单例的方式,不过后来发现其实在ios 4.0后有更加简单的方式. 就是使用GCD的功能 代码如下: + (instantClass *)sha ...
 - [iOS dispatch_once创建单例]
		
自苹果引入了Grand Central Dispatch (GCD)(Mac OS 10.6和iOS4.0)后,创建单例又有了新的方法,那就是使用dispatch_once函数,当然,随着演进的进行, ...
 - ios oc 和 swfit 用dispatch_once 创建单例
		
网上已经有方法了,我这里就是抄了下,原文链接 http://bj007.blog.51cto.com/1701577/649413 http://blog.csdn.net/u010124617/ar ...
 - 【iOS开发】创建单例的两种方法
		
创建一个单例很多办法.我先列举一个苹果官方文档中的写法. [cpp] view plaincopy static AccountManager *DefaultManager = nil; + ( ...
 - iOS 创建单例的两种方法
		
创建一个单例很多办法.我先列举一个苹果官方文档中的写法. [cpp] view plaincopy static AccountManager *DefaultManager = nil; + (Ac ...
 
随机推荐
- 14.Apache配置
			
环境: ↗ atl.example.com (192.168.1.101) ↗ www.e ...
 - Unity3d 动态批处理的问题
			
这段时间做unity3d的优化,主要的入手是减少draw call. 1.代码上主要是把一些零碎的同材质的合并成一个大的mesh. 2.减少不必要的全屏后期处理.把摄像机的renderin ...
 - WordPress 主题开发 - (五)WordPress 主题模板及目录结构 待翻译
			
While the most minimal of WordPress Themes really only need an index.php template and a style.css fi ...
 - require.js入门指南(一)
			
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
 - Java从入门到精通——基础篇之Servlet与JSP的区别
			
一.基本概念 1.1 Servlet Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面.它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器 ...
 - MySQL显示连接的数据库名
			
在默认下,MySQL在use databasename的时候,是不显示连接的库名! mysql> show databases;+--------------------+| Database ...
 - yii2怎样写规则可以隐藏url地址里的控制器名字
			
yii2怎样写规则可以隐藏url地址里的控制器名字,例如现在的是***.com/site/index.html要变成***.com/index.html '<action:index>.h ...
 - 微软职位内部推荐-Android Developer
			
微软近期Open的职位: Position: SDE II or Senior SDE -- Mobile Products Android/WP Contact Person: Winnie Wei ...
 - NET免费服务器
			
NET免费服务器 1.先注册一个号.地址:https://appharbor.com/ 2.看看有没有你需要的插件,基本上都是免费的 3.本地创建git库 4.复制git远程仓库的地址 5.推送到远程 ...
 - Careercup - Facebook面试题 - 5179916190482432
			
2014-05-01 00:45 题目链接 原题: input [,,,] output [,,,] Multiply all fields except it's own position. Res ...