GCD实现简单的单例类-Singletion
什么是单例模式
1.单例模式是一个类在系统中只有一个实例对象。通过全局的一个入口点对这个实例对象进行访问。在 iOS 开发中,单例模式是非常有用的一种设计模式。如 下图,是一个简单单例模式的 UML 类图。

2.iOS SDK 中也有许多类使用了单例模式,例如,UIApplication:当程序启动的 时候,会调用 UIApplicationMain 方法,在该方法中,会实例化一个 UIApplication 对象,之后在程序中的任意地方调用 sharedApplication 方法都将返回一个与当前应用程序相关的 UIApplication 实例(UIApplicationMain 方法中创建的 UIApplication 单例)。
3.简单GCD单例类的实现
#import "DMSingletion.h"
static DMSingletion *_dmSingletion = nil;
@implementation DMSingletion +(id)sharedDmSingletion
{ if (_dmSingletion == nil) { static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_dmSingletion=[[DMSingletion alloc] init]; }); } return _dmSingletion; } //重写alloc 方法 即便是使用alloc 的方法 该方法只执行一次
+(instancetype)alloc
{ static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{ _dmSingletion = [super alloc];
}); return _dmSingletion;
}
@end
//*******************************************
#import "ViewController.h"
#import "DMSingletion.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; [self textGCDSingletion]; [self textGCDRewWriteAlloc];
} -(void)textGCDSingletion
{
//创建第一个对象
DMSingletion *firstObject = [DMSingletion sharedDmSingletion];
//创建第二个对象
DMSingletion *secondObject = [DMSingletion sharedDmSingletion]; NSLog(@"\nfirstObject:%@\nsecondObject:%@",firstObject,secondObject);
} -(void)textGCDRewWriteAlloc
{
//创建一个对象
DMSingletion *firstObject = [DMSingletion sharedDmSingletion]; DMSingletion *secondObject = [[DMSingletion alloc] init]; NSLog(@"\nfirstObject:%@\nsecondObject:%@",firstObject,secondObject); }
@end
GCD实现简单的单例类-Singletion的更多相关文章
- Java单例类的简单实现
对于java新手来说,单例类给我的印象挺深,之前一道web后台笔试题就是写单例类.*.*可惜当时不了解. 在大部分时候,我们将类的构造器定义成public访问权限,允许任何类自由创建该类的对象.但在某 ...
- 如何防止JAVA反射对单例类的攻击?
在我的上篇随笔中,我们知道了创建单例类有以下几种方式: (1).饿汉式; (2).懒汉式(.加同步锁的懒汉式.加双重校验锁的懒汉式.防止指令重排优化的懒汉式); (3).登记式单例模式; (4).静态 ...
- 设计模式(java) 单例模式 单例类
·单例类 单实例类,就是这个类只能创建一个对象,保证了对象实例的唯一性. 1.单例模式( Singleton Pattern) 是一个比较简单的模式, 其定义如下:Ensure a class has ...
- iOS - OC SingleClass 单例类
前言 单例对象能够被整个程序所操作.对于一个单例类,无论初始化单例对象多少次,也只能有一个单例对象存在,并且该对象是全局的,能够被整个系统访问到. 特点: 在内存中只有一个实例 提供一个全局的访问点 ...
- 使用GCD的dispatch_once创建单例
使用GCD的dispatch_once创建单例 介绍了创建单例的方式,不过后来发现其实在ios 4.0后有更加简单的方式. 就是使用GCD的功能 代码如下: + (instantClass *)sha ...
- [Android面试题-7] 写出一个Java的Singleton类(即单例类)
1.首先明确单例的概念和特点: a>单例类只能有一个实例 b>单例类必须自己创建一个自己的唯一实例 c>单例类必须为其他所有对象提供这个实例 2.单例具有几种模式,最简单的两种分别是 ...
- [iOS]封装单例类
[iOS]封装单例类 今天在学习iOS的SQLite开发,发现在需要使用SQLite的每个视图中,都需要对数据库进行打开或关闭,觉得挺麻烦的:于是在想能否写个单例类对这些操作进行封(因以前一直在使用D ...
- Hibernate 系列教程1-枚举单例类
你还在为不知道怎样正确使用Hibernate而纠结吗 你还在为不知道怎样配置映射文件而郁闷吗 枚举单例(Enum Singleton) 是实现单例模式的一种方式而已,不过写法简单,创建枚举默认也是线程 ...
- C++11 单例类实现
单例类: (1) 单例类保证全局只有一个唯一的实例对象. (2) 单例类保证只有唯一的接口获取这唯一实例. 非线程安全的单例类举例: class CSingleton { public: ~CSing ...
随机推荐
- python 笔记3--高级特性
切片 语法 L[l:r] 取L[l],L[l+1]-L[r-2],L[r-1] L[l:r:m] 取L[l],L[l+m],L[l+2*m],L[l+3*m]-.(满足l+n*m<=r-1) t ...
- yum安裝的包如何保留到本地
一, 很多时候,我们一直用yum安装的软件,但是毫无疑问,很多人都会想yum安装的软件的包存放在哪里了呢? 这是因为yum默认并不保存你所安装的包,那么如何才能保留安装的软件包呢? 方法很简单:修改y ...
- stagefright框架(五)-Video Rendering
AwesomePlayer::onVideoEvent除了透過OMXCodec::read取得解碼後的資料外,還必須將這些資料(mVideoBuffer)傳給video renderer,以便畫到螢幕 ...
- 仅当使用了列的列表 并且 identity_insert 为 on 时 才能在表 中为标识列指定显式值
当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'products' 中的标识列插入显式值.” 示例: 1.首先建立一个有标识列的表:CREATE TABLE products (i ...
- php zendstudio 常用的一些自定义模板标签
<?php /** * xxx.php * ============================================== * Copy right 2013-2016 http: ...
- python面向对象(上)
创建类 Python 类使用 class 关键字来创建.简单的类的声明可以是关键字后紧跟类名: class ClassName(bases): 'class documentation string' ...
- [汇编语言]-第七章 SI和DI
1- SI和DI是8086CPU中和bx功能相近的寄存器, SI和DI不能够分成两个8位寄存器来使用, 下面的三组指令实现了相同的功能: (1) mov bx,0 mov ax,[bx] (2) m ...
- thinkphp框架开启页面gzip压缩
Thinkphp下开启gzip压缩很简单,不管你是哪个版本,只要在你的入口文件index.PHP中加入以下两行,如果你的服务器支持,那么就OK了. define ( "GZIP_ENABLE ...
- mysql 1054错误
往数据库插入数据的时候报错,插入数据的是这样的 [SQL] insert into stock(code,name,b_price,s_price,num,rate,profit) values (1 ...
- Holding Bin-Laden Captive!(hdoj1085)代码并未完全看懂
We all know that Bin-Laden is a notorious terrorist, and he has disappeared for a long time. But rec ...