OC的单例模式的实现
下面是在ARC,GCD下的单例模式实现:
头文件里申明类方法getInstance:
#import <Foundation/Foundation.h> @interface SingleTon : NSObject
+ (SingleTon*) getInstance; @property (nonatomic,strong) NSString* SingleData; @end
实现中,使用静态变量instance存储单例,在init中设置使用GCD的dicpatch_once来执行仅仅执行一次的线程安全代码.即设置在init中,仅仅在instance为nil时,来进行初始化,将获得的对象赋值给instance,并返回instance.在OC中不能隐藏构造函数,而我觉得,这样的情况下,对构造函数进行一些改动,使使用者即使能调用init,但终于获得得依旧是单例对象:
@implementation SingleTon
static SingleTon* instance; -(instancetype)init{
static dispatch_once_t once;
dispatch_once(&once,^{
instance = [super init];
if(nil != instance){
instance.SingleData = @"init";
}
});
return instance;
} +(SingleTon *) getInstance{
if(nil == instance){
instance = [[self alloc]init];
}
return instance;
} @end
个人临时感觉这样非常安全了.
OC的单例模式的实现的更多相关文章
- OC 设计模式——单例模式
单例模式的作用:可以保证在程序运行过程,一个类只有一个实例,而且这个实例易于供外界访问.永远只分配一次内存给这个类.由于在调用alloc方法的时候,都会调用allocWithZone,所以要重写这个方 ...
- iOS开发——实用技术OC篇&单例模式的实实现(ACR&MRC)
单例模式的实实现(ACR&MRC) 在iOS开发中单例模式是一种非常常见的模式,虽然我们自己实现的比较少,但是,系统却提供了不少的到来模式给我们用,比如最常见的UIApplication,No ...
- OC的单例模式
原文: http://www.galloway.me.uk/tutorials/singleton-classes/ 在iOS开发中,单例是最有用的设计模式之一.它是在代码间共享数据而不需要手动传递参 ...
- Objective-C单例模式的常用实现
oc中单例模式可以使用以下方法来实现 + (YourClass *)sharedInstance { static dispatch_once_t once; static YourClass *sh ...
- 15分钟弄懂 const 和 #define
什么是const ? 什么是#define? 他们有什么用? 他们有什么区别? 应该怎么用? 总结 1. 什么是const ? const是C/C++中的一个关键字(修饰符), const一般用来定义 ...
- OC 单例模式
OC 单例模式 概念 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约 ...
- OC学习篇之---单例模式
在之前的一片文章中介绍了对象的拷贝相关知识:http://blog.csdn.net/jiangwei0910410003/article/details/41926531,今天我们来看一下OC中的单 ...
- OC编程之道-创建对象之单例模式
一 何为单例singleton模式?(what) 保证一个类只有一个实例,并提供一个访问它的全局访问点. 二 何时使用单例模式?(where) 1类只能有一个实例,而且必须从一个为人熟知的访问点对其访 ...
- OC中使用单例模式
static Config * instance = nil; +(Config *) Instance { @synchronized(self) { if(nil == instance) { [ ...
随机推荐
- 关于【键鼠<局域网>共享软件:synergy】install
Installation 另外,本人在centos6.5环境下作为server运行时,遇到一个问题,synergy1.5随着系统升级居然变成了1.3X,所以如果遇到类似问题,请您先用 rpm -qa ...
- Mvc Model 模板的获取【学习笔记】
MVC的Model模板有两种:一种编辑模式(@Html.EditorFor()).一种显示模式(Html.DisplayFor()). 模板的获取与执行(以下转自这里): 当我们调用HtmlHelpe ...
- HashMap遍历,推荐使用entrySet()
之前map遍历,偶尔会先去keyset然后再遍历keyset 比如 Map map = new HashMap(); Iterator it = map.keySet().iterator(); wh ...
- javascript学习代码
点击改变p和div元素: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...
- bzoj 1002 [FJOI2007]轮状病毒 高精度&&找规律&&基尔霍夫矩阵
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2234 Solved: 1227[Submit][Statu ...
- scroller
sh做的js控件. 另外内部被scroller包裹的div不可以定位成absolute,会撑不出高度. 上面只是使用的注意事项. 很佩服人家能封装出这样的控件. 如果我也能写得出来就能毕业了,也不用担 ...
- 初级Oracle和SQL学习者的学习笔记。韩顺平-玩转oracle。
我自己就是一个oracle和sql的初学者,前段时间看了韩顺平老师的oracle视频教程,觉得很深入浅出,收获了很多.同时自己也做了不少笔记,现在想将纸质笔记以自己的话总结出来.俗话说得好:教学总是相 ...
- 又拍云——图像处理师(GraphicsMagick、ImageMagick、FFmpeg)
云处理平台开发工程师 工作地:杭州 岗位职责:负责云处理平台研发工作: 岗位要求: 扎实的 C 语言编程基础及算法优化能力: 至少能够熟练使用一门脚本语言(Python.Ruby.Lua 等)进行日常 ...
- Weblogic8.1 的性能优化
注:在下面做的介绍都是以Weblogic8.1为例的,其它版本的Weblogic可能会有些许不同. 1) 设置JAVA参数: a) 编辑Weblogic Server启动脚本文件: BEA_HOMEu ...
- 详解Linux配置iSCSI方法
iSCSI技术是在2001年初由IBM及Cisco联合制定的技术,在2003年5月微软在 Windows 2003中 开始自己正式支持iSCSI微软此举很大程度上的推动了iSCSI技术的发展.下面为大 ...