什么是单例模式:(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)的更多相关文章

  1. 设计模式之单例模式——Singleton

                        设计模式之单例模式--Singleton 设计意图: 保证类仅有一个实例,并且可以供应用程序全局使用.为了保证这一点,就需要这个类自己创建自己的对象,并且对外有 ...

  2. 【白话设计模式四】单例模式(Singleton)

    转自:https://my.oschina.net/xianggao/blog/616385 0 系列目录 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factor ...

  3. ooad单例模式-Singleton

                                                单例模式Singleton 主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 比如建立目录 ...

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

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

  5. 浅谈设计模式--单例模式(Singleton Pattern)

    题外话:好久没写blog,做知识归纳整理了.本来设计模式就是个坑,各种文章也写烂了.不过,不是自己写的东西,缺少点知识的存在感.目前还没做到光看即能记住,得写.所以准备跳入设计模式这个大坑. 开篇先贡 ...

  6. 设计模式之——单例模式(Singleton)的常见应用场景

    单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此 ...

  7. 设计模式之单例模式(Singleton Pattern)

    单例模式 单例模式(Singleton Pattern)在java中算是最常用的设计模式之一,主要用于控制控制类实例的数量,防止外部实例化或者修改.单例模式在某些场景下可以提高系统运行效率.实现中的主 ...

  8. 设计模式(4) -- 单例模式(Singleton)

    设计模式(4)  -- 单例模式(Singleton) 试想一个读取配置文件的需求,创建完读取类后通过New一个类的实例来读取配置文件的内容,在系统运行期间,系统中会存在很多个该类的实例对象,也就是说 ...

  9. IOS单例模式(Singleton)

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

  10. java设计模式之 单例模式 Singleton

    static 的应用 单例模式 Singleton 单例:保证一个类在系统中最多只创建一个实例. 好处:由于过多创建对象实例,会产生过多的系统垃圾,需要GC频繁回收,由于GC会占用较大的系统资源,所有 ...

随机推荐

  1. Thinkphp回顾之(四)查询方法深入学习

    本次讲的查询方法主要有:表达式查询,模糊查询,between语句,in语句,区间查询,统计数据,普通方式查询,但大多数都只是引入数组而已,明白了第一个,其他的也就差不多全明白了,唯一要注意的是在后台中 ...

  2. Aspnetpage ie10下 __dopost方法未找到 不能翻页的问题

    1.问题分析: 没有__dopost 的原因是因为没有 ie10下 页面里 没有这个 方法,和 2个 input 标签,ie10 没有解析出来,所以就不能翻页了. 2.解决办法:(缺什么补什么,将这个 ...

  3. thinkphp相关总结

    1.model层验证多个字段唯一性 protected $_validate = array( array('appid,awardid', '', '不能重复添加', self::MUST_VALI ...

  4. EF之结构进一步优化

    针对之前的使用,做了进一步优化 1.将DAL对象缓存起来 2.仓储类不依赖固定构造的DbContext,执行操作的时候,从线程中动态读取DbContext,这一步也是为了方便将DAL对象缓存起来,解决 ...

  5. 启动tomcat时,报错:IOException while loading persisted sessions: java.io.EOFException解决方法

    报错原因:加载持久化session错误,tomcat加载时读取的文件是是*.ser,session序列化文件,文件的位置是tomcat\work\Catalina\localhost,找到sessio ...

  6. 《Spring MVC学习指南》怎么样?答:书名具有很大的欺骗性

    2016年6月21日 最近,因为工作需要,我从网上买了一本<Spring MVC学习指南>,ISBN编号: 978-7-115-38639-7,定价:49.00元.此书是[美]Paul D ...

  7. 关于freemaker的一点使用技巧

    在做国泰君安2016年中秋送电影票活动中,需要做这样一个手机页面,展示所有中奖用户的中奖信息.如下图: 要求对用户的后记号码中间5位做隐藏处理.最开始的处理方法是在对用户实体的get()方法做处理 / ...

  8. slide效果

    html和js部分 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  9. Python之操作Redis、 RabbitMQ、SQLAlchemy、paramiko、mysql

    一.Redis Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.Redis是一个key-value存储系统.和 ...

  10. 微信touchmove不生效

    最近在写一个微信里面滑动切换图片的功能,发现在chrome下都正常显示,可是在微信和qq浏览器里面就是不行. 经过一番排查,发现了问题: touchmove只触发了一次. 解决方案: 在touchst ...