百度定义:单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例.

维基百科:在软件工程中,单例是一种用于实现单例的数学概念,即将类的实例化限制成仅一个对象的设计模式。

简单理解:单例模式 是只有有一个实例对象的设计模式

这次 使用 单例 用 gcd 来创建

解释几个关键词

dispatch_once  :这个代码块 在整个应用的生命周期 只执行一次, 并且线程安全(如果被多个线程调用,该函数会同步等待直至代码块完成。gcd的底层做处理保证线程安全)

dispatch_once_t:(参数)这个断言 是声明这个代码块是否已经创建过了

优点:

(1)dispatch_once 线程安全

(2)代码简洁

(3)高效(比@synchronized 的两倍 "52个技巧上说的")

我的使用场景很简单, 我想创建一个单例字典 存储 刷新关键字 利用逻辑变化条件 指定刷新页面

我写的枚举恰好用到了 "52个技巧"里面学到的知识,因为  枚举 不一定得是 正整数 还可以是 四个字符的(通常4个字符代表一个字节 int 是4个字节)

这样 我可以定义不同页面的枚举 并且每个页面有自己独立的枚举参数

使用:

使用的时候 直接调用 类方法里面的实例方法 [AHFRefreshPageUtil shareInstance]setNeedRefreshStatus:YES type:AHFSearchRefreshTypeAll];

这样可以保证键值对 唯一

展示创建单例:

//
// AHFRefreshPageUtil.h
// dailylife
//
// Created by HF on 16/5/3.
//
// #import <Foundation/Foundation.h> @interface AHFRefreshPageUtil : NSObject + (AHFRefreshPageUtil *)sharedInstance; @end
//
// AHFRefreshPageUtil.m
// dailylife
//
// Created by HF on 16/5/3.
//
// #import "AHFRefreshPageUtil.h" @implementation AHFRefreshPageUtil
{
NSMutableDictionary *refreshDictionary;
}
static AHFRefreshPageUtil *refreshPageUtil; - (instancetype)init
{
self = [super init];
if(self){
refreshDictionary = [NSMutableDictionary dictionary];
}
return self;
} + (AHFRefreshPageUtil *)sharedInstance
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
refreshPageUtil = [[AHFRefreshPageUtil alloc] init];
});
return refreshPageUtil;

}
//待添加目标实例方法

其实 这里 这么写有潜在的bug  假如 使用

[[AHFRefreshPageUtil  alloc]init] 就是 普通的初始化了,不是单例用法了 所以  应该 把alloc 和 copy 都重写 防止意外出错,但是 我这里就默认 这一个用法,如果 出现 alloc 用法(并没有类似需求的情况下) 那一定是猪队友干的,review代码 好好说说他 就好了 哈哈 此处 不再多余添加代码(如果你想写的完美 可以尝试重写 alloc copy 方法 让他们返回时候 都是 同一个实例"sharedInstance" 就好了)

我的一个技术网友 总结的挺好的 简单一句话" 主要看如何实现线程唯一的创建 "

iOS 单例模式 学习 "52个方法 第6章 45条 使用 dispath_once 来执行只需运行一次的线程安全代码"的更多相关文章

  1. iOS多线程学习

    在 iOS 中其实目前有 4 套多线程方案,他们分别是: Pthreads NSThread GCD NSOperation & NSOperationQueue 所以接下来,我会一一讲解这些 ...

  2. IOS基础学习-2: UIButton

    IOS基础学习-2: UIButton   UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...

  3. ios开发学习笔记(这里一定有你想要的东西,全部免费)

    1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现clear Color无法使用). 其实在代码里还是可以设置的,那就是删除背景view [ ...

  4. ios网络学习------4 UIWebView的加载本地数据的三种方式

    ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...

  5. ios网络学习------6 json格式数据的请求处理

    ios网络学习------6 json格式数据的请求处理 分类: IOS2014-06-30 20:33 471人阅读 评论(3) 收藏 举报 #import "MainViewContro ...

  6. iOS单例模式(Singleton)写法简析

    单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模式的要点有三个:一是某个类只能有一个实例: ...

  7. 开源中国iOS客户端学习

    开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html ...

  8. IOS单例模式(Singleton)

    IOS单例模式(Singleton)   单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模 ...

  9. 原 iOS深入学习(Block全面分析)http://my.oschina.net/leejan97/blog/268536

    原 iOS深入学习(Block全面分析) 发表于1年前(2014-05-24 16:45)   阅读(26949) | 评论(14) 39人收藏此文章, 我要收藏 赞21 12月12日北京OSC源创会 ...

随机推荐

  1. Windows Service的转换与部署

    开发Windows Service,可能会碰到以下两种情况. 1. 直接开发一个Windows Service 网上有很多教程,可以参考这个: http://www.cnblogs.com/sorex ...

  2. HTML— 弹出遮盖层

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  3. Div+CSS布局入门教程

    http://www.blueidea.com/tech/site/2006/3574.asp ———————————————————————————————————————————————————— ...

  4. Microsoft SQL Server JDBC 驱动程序支持矩阵

    本页包含 Microsoft SQL Server JDBC 驱动程序的支持矩阵和支持生命周期策略. Microsoft JDBC 驱动程序支持生命周期矩阵和策略 Microsoft 支持生命周期 ( ...

  5. 【独立开发人员er Cocos2d-x实战 013】Cocos2dx 网络编程实战之星座运势

    学习cocos2d-x和cocos creator的圈子:cocos2d-x:436689827    cocos creator:124727696 本篇文章主要内容:jsoncpp的使用,Coco ...

  6. 最新win7系统安全稳定版

    最新win7系统32位安全稳定版 V2016年2月,具有更安全.更稳定.更人性化等特点.集成最常用的装机软件,集成最全面的硬件驱动,精心挑选的系统维护工具,加上萝卜独有人性化的设计.是电脑城.个人.公 ...

  7. hibernate Session一级缓存 应该注意的地方

    Session缓存 Hibernate的一级缓存是由Session提供的,因此它存在于Session的整个生命周期中,当程序调用save()/update()/saveOrupdate()/get() ...

  8. MEF基础概念学习笔记

    MEF,是微软.net框架下的一个框架类库.可以使你的程序低耦合的加载扩展.在开发插件,或者开发一些需要灵活扩展的功能的时候经常用到.例如微软给出的计算器的例子.当你开发计算器的时候,初始功能只提供了 ...

  9. JAVA学习第六十三课 — 关于client服务端 &amp;&amp; URL类 &amp; URLConnection

    常见的client和服务端 client:       浏览器:IE:弹窗体,猎豹:弹窗体.多标签,争强效果 服务端:       server:TomCat:1.处理请求 2.给予应答 想让TomC ...

  10. IDLE崩溃:IDLE's subprocess didn't make connection. Either IDLE can't start a...

    今天在测试Python脚本的时候,突然间发现,脚本不能启动了,还弹出了“IDLE's subprocess didn't make connection. Either IDLE can't star ...