单例模式(singleton)
什么是单例模式:(singleton)
单例模式的意图是类的对象成为系统中唯一的实例,提供一个访问点,供客户类共分享资源
单例类,必须提供一个接入点(特殊的类方法)
// SingletonTools.h
// 单例模式实现
//
// Created by CloudWalk on 15/9/11.
// Copyright (c) 2015年 CloudWalk. All rights reserved.
// #import <Foundation/Foundation.h> @interface SingletonTools : NSObject
@property(nonatomic,assign) int num;
@property(nonatomic, copy)NSString *s;
// 单例的类,提供一个接入点
+ (instancetype)shareInstance; @end
// SingletonTools.m
// 单例模式实现
//
// Created by CloudWalk on 15/9/11.
// Copyright (c) 2015年 CloudWalk. All rights reserved.
// #import "SingletonTools.h"
static SingletonTools *instance = nil; @implementation SingletonTools
// 单利的接入点方法
+ (instancetype)shareInstance
{
@synchronized(self){
if(instance == nil)
{
instance = [[SingletonTools alloc] init];
return instance;
}
}
return instance;
}
@end
// Person.h
// 单例模式实现
//
// Created by CloudWalk on 15/9/11.
// Copyright (c) 2015年 CloudWalk. All rights reserved.
// #import <Foundation/Foundation.h> @interface Person : NSObject
- (void)run;
@end
//
// Person.m
// 单例模式实现
//
// Created by CloudWalk on 15/9/11.
// Copyright (c) 2015年 CloudWalk. All rights reserved.
// #import "Person.h"
#import "SingletonTools.h"
@implementation Person
- (void)run
{
SingletonTools *st = [SingletonTools shareInstance];
st.num = ;
st.s = @"jajf";
NSLog(@"%d %@",st.num, st.s);
}
@end
// main.m
// 单例模式实现
//
// Created by CloudWalk on 15/9/11.
// Copyright (c) 2015年 CloudWalk. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Person.h"
#import "SingletonTools.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [Person new];
[p run];
}
return ;
}
复杂的单利 :copy,new,alloc 创建对象,都不会产生新的对象
// Person.m
// Created by CloudWalk on 15/9/2.
// Copyright (c) 2015年 CloudWalk. All rights reserved.
// #import "Person.h" // 变量指向单例对象
static Person *singletonInstance = nil;
@implementation Person
+ (id)sharePerson
{
// 线程锁
@synchronized(self)
{
// 创建一个单例实例
if (singletonInstance == nil) {
singletonInstance = [[[self class] alloc] init];
}
}
return singletonInstance;
} #pragma mark - 下面的方法为了确保只有一个实例对象
+ (id)allocWithZone:(NSZone *)zone
{
if (singletonInstance == nil)
{
singletonInstance =[super allocWithZone:zone];
}
return singletonInstance;
} // 实现NSCopying协议
- (id)copyWithZone:(NSZone *)zone
{
return singletonInstance;
} - (id)retain
{
return singletonInstance;
} - (oneway void)release
{ } - (id)autorelease
{
return singletonInstance;
} - (NSUInteger)retainCount
{
return UINT_MAX;
}
@end
单例模式(singleton)的更多相关文章
- 设计模式之单例模式——Singleton
设计模式之单例模式--Singleton 设计意图: 保证类仅有一个实例,并且可以供应用程序全局使用.为了保证这一点,就需要这个类自己创建自己的对象,并且对外有 ...
- 【白话设计模式四】单例模式(Singleton)
转自:https://my.oschina.net/xianggao/blog/616385 0 系列目录 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factor ...
- ooad单例模式-Singleton
单例模式Singleton 主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 比如建立目录 ...
- iOS单例模式(Singleton)写法简析
单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模式的要点有三个:一是某个类只能有一个实例: ...
- 浅谈设计模式--单例模式(Singleton Pattern)
题外话:好久没写blog,做知识归纳整理了.本来设计模式就是个坑,各种文章也写烂了.不过,不是自己写的东西,缺少点知识的存在感.目前还没做到光看即能记住,得写.所以准备跳入设计模式这个大坑. 开篇先贡 ...
- 设计模式之——单例模式(Singleton)的常见应用场景
单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此 ...
- 设计模式之单例模式(Singleton Pattern)
单例模式 单例模式(Singleton Pattern)在java中算是最常用的设计模式之一,主要用于控制控制类实例的数量,防止外部实例化或者修改.单例模式在某些场景下可以提高系统运行效率.实现中的主 ...
- 设计模式(4) -- 单例模式(Singleton)
设计模式(4) -- 单例模式(Singleton) 试想一个读取配置文件的需求,创建完读取类后通过New一个类的实例来读取配置文件的内容,在系统运行期间,系统中会存在很多个该类的实例对象,也就是说 ...
- IOS单例模式(Singleton)
IOS单例模式(Singleton) 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模 ...
- java设计模式之 单例模式 Singleton
static 的应用 单例模式 Singleton 单例:保证一个类在系统中最多只创建一个实例. 好处:由于过多创建对象实例,会产生过多的系统垃圾,需要GC频繁回收,由于GC会占用较大的系统资源,所有 ...
随机推荐
- 我所理解的ECMAScript、DOM、BOM---写给新手们
像很多新手一样,我知道js有三部分组成,即ECMAScript.DOM.BOM三部分组成,ECMAScript是核心解释器.DOM(Document Object Model)是文档对象模型.BOM( ...
- Qt on Android 蓝牙开发
版权声明:本文为MULTIBEANS ORG研发跟随文章,未经MLT ORG允许不得转载. 最近做项目,需要开发安卓应用,实现串口的收发,目测CH340G在安卓手机上非常麻烦,而且驱动都是Java版本 ...
- easyUI + swfupload 多附件上传功能
public void UPLOADFILED() { Date dt = new Date(System.currentTimeMillis()); SimpleDateFormat sdf = n ...
- 渗透杂记-2013-07-13 windows/mssql/mssql_payload
扫描一下 Starting Nmap 5.30BETA1 ( http://nmap.org ) at 2011-05-06 09:36 中国标准时间 NSE: Loaded 49 scripts f ...
- Canvas实现图片放大缩小移动操作
对于HTML5相信大家都不陌生,很早就出来了,但是貌似都没有真正的使用过.最近做项目时要实现这样一个需求:一个图片,大小不固定,要求能实现类似地图一样放大.缩小.移动功能.这里就很合适使用html5的 ...
- hdu 4920 Matrix multiplication bitset优化常数
Matrix multiplication Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/ ...
- 非root用户安装软件
下面简要说一下Linux下非root用户安装软件的一般流程: 1. 获取源代码,一般是wget方式,ubuntu可以使用apt-get source来获取源代码. 2. 解压源代码,一般使用tar - ...
- sublime-text3 3059基本配置
1.下载安装官方版注册机语言包 参考安装: http://www.xiumu.org/note/sublime-text-3.shtml 2.插件 Package ControlConvertToUT ...
- c++ STL 学习记录 草稿。
非常丑陋的尝试实现stl.慢慢修改吧. 1)简单实现 vector和list. 2)思索如何开始编写算法. 1,所有容器继承一个抽象容器.那么算法就可以使用抽象基类的next方法来遍历元素. 容器间耦 ...
- 扒一扒自从买了kindle后看的书
一.<性别战争> 讲述的是动物界各类动物的xxx(你懂的),以动物拟人化的口吻来进行问答,十分的生动形象,虽说和自己的生活没有多大联系,但是偶尔了解一下,也是意外的不错的感觉. 二.< ...