单例模式(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会占用较大的系统资源,所有 ...
随机推荐
- 。net 之view筛选
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- Android Paint的属性
在Paint中有很多的属性可以设置,比如可以设置阴影,颜色过滤等等,这些会产生不同的奇妙效果,今天就对各种属性探索一下. 方法一: 1 //设置绘制的颜色,a代表透明度,r,g,b代表颜色值. 2 s ...
- 2D空间中判断一点是否在三角形内
要注意如果是XY坐标轴的2D空间,要取差乘分量z而不是y. 实现原理是,将三角形ABC三个边(AB,BC,CA)分别与比较点判断差乘,如果这3个差乘结果表示的方向一致,说明就在三角形内. 效果: 代码 ...
- mac攻略(六) -- mac根目录分析
根目录截图如下 符合unix传统的目录 /bin 传统unix命令的存放目录,如ls,rm,mv等. /sbin 传统unix管理类命令存放目录,如fdisk,ifconfig等等. /usr ...
- Intellij IDEA 配置最简单的maven-struts2环境的web项目
在idea里搭建maven项目 看着网上大神发的各种博客,然后自己搭建出来一个最简单的maven-strtus2项目,供初学者学习 新建project
- linux杀死jobs的正确方法
输入命令:logout 终端显示:There are stopped jobs. 解决方法: 输入命令:jobs 终端显示:[]+ Stopped vim /etc/network/interface ...
- highchart导出功能的介绍更改exporting源码
本案利用highchar作为前端,展示数据的图形效果,结合spring+springmvc来完成数据图片的导出. jsp引入文件: <script src="${pageContext ...
- Solr内置的字段类型
字段类型在org.apache.solr.schema包下 Class 描述 BCDIntField 二进制整形字段 BCDLongField 二进制长整形字段 BCDStrField 二进制字符型字 ...
- 安装升级npm依赖
npm-check 能够自动检索npm包版本,并且提供交互操作界面: 有以下功能: 1.告诉你那些依赖已经过时: 2.在你决定升级时,给你提供依赖包的文档: 3.提示某个依赖没有被你使用: 4.支持全 ...
- 一篇讲Java指令重排和内存可见性的好文
在这里: http://tech.meituan.com/java-memory-reordering.html 指令重排和内存可见性(缓存不一致)是两个不同的问题. volatile关键字太强,即阻 ...