iOS 单例模式 学习 "52个方法 第6章 45条 使用 dispath_once 来执行只需运行一次的线程安全代码"
百度定义:单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例.
维基百科:在软件工程中,单例是一种用于实现单例的数学概念,即将类的实例化限制成仅一个对象的设计模式。
简单理解:单例模式 是只有有一个实例对象的设计模式
这次 使用 单例 用 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 来执行只需运行一次的线程安全代码"的更多相关文章
- iOS多线程学习
		
在 iOS 中其实目前有 4 套多线程方案,他们分别是: Pthreads NSThread GCD NSOperation & NSOperationQueue 所以接下来,我会一一讲解这些 ...
 - IOS基础学习-2: UIButton
		
IOS基础学习-2: UIButton UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...
 - ios开发学习笔记(这里一定有你想要的东西,全部免费)
		
1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现clear Color无法使用). 其实在代码里还是可以设置的,那就是删除背景view [ ...
 - ios网络学习------4 UIWebView的加载本地数据的三种方式
		
ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...
 - ios网络学习------6 json格式数据的请求处理
		
ios网络学习------6 json格式数据的请求处理 分类: IOS2014-06-30 20:33 471人阅读 评论(3) 收藏 举报 #import "MainViewContro ...
 - iOS单例模式(Singleton)写法简析
		
单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模式的要点有三个:一是某个类只能有一个实例: ...
 - 开源中国iOS客户端学习
		
开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客 http://blog.csdn.net/column/details/xfzl-kykhd.html ...
 - IOS单例模式(Singleton)
		
IOS单例模式(Singleton) 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模 ...
 - 原 iOS深入学习(Block全面分析)http://my.oschina.net/leejan97/blog/268536
		
原 iOS深入学习(Block全面分析) 发表于1年前(2014-05-24 16:45) 阅读(26949) | 评论(14) 39人收藏此文章, 我要收藏 赞21 12月12日北京OSC源创会 ...
 
随机推荐
- python基础-初识Python和不同语言之间的区别
			
一.Python的创始人谁? Python之父:吉多·范罗苏姆GuidovanRossum 吉多·范罗苏姆是一名荷兰计算机程序员,他作为Python程序设计语言的作者而为人们熟知.在Python社区, ...
 - 【Mac安装,ATX基于uiautomator2】之安装步骤
			
Mac系统下安装uiaotumator2: 参考网址:<uiautomator2>以及参考github官方文档 注意:下面有坑,如果你没有下面的问题请直接跳转到 1.安装uiaotumat ...
 - implode  把数组 组成一个字符串
			
$data=array(1,2,3,4,5); implode(",",$data);
 - Xcode中授权普通成员
			
问题: 在普通用户账户下使用系统的Xcode在编译通过时候会提示” Developer Tools Access“需控制另一进程,需要输入“Developer Tools”组用户名密码才能继续调试 解 ...
 - 离散数学及其应用(Discrete Mathematica With Application 7th)学习笔记 第一章
			
目前本人只进行到了第五章的章末补充练习,应该是从4月6号开始学习的,又是英文版,而且基本就下班回家抽2个小时左右去学,所以进度较慢. 由于本质是数学,除了一些程序处理和大计算量的问题,基本上一本草稿本 ...
 - python django -4 模板
			
模板介绍 作为Web框架,Django提供了模板,可以很便利的动态生成HTML 模版系统致力于表达外观,而不是程序逻辑 模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一个视 ...
 - POI Excel 冷冻线
			
冷冻线 Sheet.createFreezePane data bar and color scale SheetConditionalFormatting scf = sheet.getSheet ...
 - asp.net C#实现下载文件的六种方法实例
			
protected void Button1_Click(object sender, EventArgs e) { /* 微软为Response对象提供了一个新的方法TransmitFile来 ...
 - Valgrind使用-转载
			
完全转载的,仅当学习使用 对应链接地址:http://www.gjprj.cn/news1.asp?id=2862 另见valgrind的使用简介,http://blog.csdn.net/sduli ...
 - wtform 表单示例
			
用户注册 from flask import Flask, render_template, request, redirect from wtforms import Form from wtfor ...