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 ...
随机推荐
- 4. Linux 系统目录
一.Linux 系统目录的作用 /home 用户主目录的根节点,所有用户自己独有的文件一般放在这个目录下的用户目录下 /bin 二进制可执行命令 / ...
- 线程:Java主线程等待子线程结束
使用Thread.join()方法: public class App { public static void main(String[] args) { testMain(); } public ...
- HDU 5792 World is Exploding
题意: 给出n代表序列的长度,接下来给出序列A.找出abcd满足abcd互不相等1<=a<b<c<d<=n的同时A[a]<A[b],A[c]>A[d],问这样 ...
- 将json格式日期(毫秒数)转成日常日期格式和日常格式时间对比
第一:是把生成的Json格式的时间转换,注意要看清楚时间的格式 function (cellval) { var date = new Date(parseInt(cellval.replace(&q ...
- What is SignalR and Why Should I Use It?
原文地址: What is SignalR and why should I use it? When I first heard about SignalR, I was not sure what ...
- linux学习笔记之进程间通信
一.基础知识. 1:进程通信基础(interProcess Communication, IPC):管道,FIFO(命名管道),XSI IPC,POSIX 信号量. 2:管道. 1,缺陷. 1)部分系 ...
- sqlite在c++中的使用方法
1.需要下载的文件 http://pan.baidu.com/s/1c06NpzM 2.执行文件shell的编译 3.在c++中如何使用 #include <stdio.h> # ...
- Java通过axis调用WebService
上午头给了我一个任务,让我对接别的公司的webservice接口,各种百度,看的头晕脑花的,终于通了,记录一下吧. jar包奉上,http://pan.baidu.com/s/1jSchC 包含:ax ...
- java poi 导出excel
poi的jar下载地址:http://poi.apache.org/ 下载后会有很多jar,但是如果只是简单的excel报表的话,导入一个poi-版本号-日期.jar就可以了. 导出代码: priva ...
- Vue.js 学习示例
本篇和大家分享的是学习Vuejs的总结和调用webapi的一个小示例:快到年底了争取和大家多分享点东西,希望能对各位有所帮助:本章内容希望大家喜欢,也希望各位多多扫码支持和推荐谢谢: » Vuejs ...