什么是单例模式:(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. GoLang语言

    1 Go语言基础 1.1 语法详解 1.1.1 注释 /* regexp 包为正则表达式实现了一个简单的库. 该库接受的正则表达式语法为: 正则表达式: 串联 { '|' 串联 } 串联: { 闭包 ...

  2. Bootstrap Modal 垂直方向加滚动条

    原文链接:http://blog.csdn.net/cyh1111/article/details/52960747 背景 使用Bootstrap Modal实现用户资料修改,由于用户信息过多,默认M ...

  3. 从零开始学习Android(一)Android环境的搭建

    好久没有开始写博客了,最近开始学习Android,所以想把学习的笔记都一一记录下来.一来是方便自己以后资料的查询,其次也是给Android新手朋友进行学习使用,再次也希 望得到高手的指点.废话少说,我 ...

  4. Java selenium web页面的滚动条操作

    摘录自:http://blog.csdn.net/iceryan/article/details/8162703 //移动到元素element对象的"顶端"与当前窗口的" ...

  5. JAVA模拟HTTP post请求上传文件

    在开发中,我们使用的比较多的HTTP请求方式基本上就是GET.POST.其中GET用于从服务器获取数据,POST主要用于向服务器提交一些表单数据,例如文件上传等.而我们在使用HTTP请求时中遇到的比较 ...

  6. 首师大附中科创教育平台 我的刷题记录 0304 50095106扔核弹(XDC,你懂的)

    今天给大家献上"C"级题:50095106扔核弹(XDC,你懂的)!! 试题编号:0304   50095106扔核弹(XDC,你懂的) 难度级别:C: 运行时间限制:1000ms ...

  7. JavaScript中数组迭代方法(jquery)

    var arr = [1,2,4,5,6]; //1.forEach(让数组中的每一项做一件事)arr.forEach(function(item,index){    console.log(ite ...

  8. 链表的C语言实现

    #ifndef _CONST_H_#define _CONST_H_ #include <stdio.h>#include <stdlib.h> typedef enum { ...

  9. ahk之路:利用ahk在window7下实现窗口置顶

    操作系统:win7 64位 ahk版本:autohotkey_L1.1.24.03 今天安装了AutoHotkey_1.1.24.03.SciTE.PuloversMacroCreator,重新开始我 ...

  10. 用css实现三级导航菜单

    主要使用css的hover伪类来实现该功能. 主要思路:先搭出三级菜单的框架,然后使用css的:hover来实现! 对li添加类selected,对该类添加position:relative属性,然后 ...