什么是单例模式:(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. Icon字体制作

    工具网站:https://icomoon.io 这个网站是免费的 功能也很强大 不过我那是铁通网络,导致这个网站不能访问,做vpn跳转就可以了 正题: 点击这里进入制作页面: 点击这里选取 svg 矢 ...

  2. redis持久化配置

    redis有rdb和aof两种持久化方式: rdb 默认方式,配置文件中相关的有: save 900 1 #900秒一次,若有1个或以上key修改则save一次,以下相同 save 300 10 sa ...

  3. jQuery学习笔记(一)jQuery选择器

    目录 jQuery选择器的优点 基本选择器 层次选择器 过滤选择器 表单选择器 第一次写博客,希望自己能够长期坚持,以写博客的方式作为总结与复习. 最近一段时间开始学习jQuery,通过写一个jQue ...

  4. 【前端】stopPropagation, preventDefault, return false的区别

    e.stopPropagation()阻止事件冒泡或者捕获 因为事件可以在各层级的节点中传递, 不管是冒泡还是捕获, 有时我们希望事件在特定节点执行完之后不再传递, 可以使用事件对象的 stopPro ...

  5. windows页面打印div(弹出新页面)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  6. Ad hoc sql

    SQL Server如何启用Ad Hoc Distributed Queries? 2011-08-11 14:53 wangdingbang CSDN博客 字号:T | T   本文主要介绍了SQL ...

  7. Using GET_APPLICATION_PROPERTY in Oracle D2k Forms

    Using GET_APPLICATION_PROPERTY in Oracle D2k Forms DescriptionReturns information about the current ...

  8. Django 1.10 找不到静态资源解决方法

    测试版本:Django 1.10 问题:Django项目找不到静态资源 解决方法: 1.首先你需要在自己的app下面创建2个目录 static 和  templates 树形结构如下(DjangoPr ...

  9. swift开发学习网站

    1.https://github.com/Aufree/trip-to-iOS#ios- 2.http://www.code4app.com/forum.php?mod=viewthread& ...

  10. Linux就该这么学

    第三章:Vim编辑器与Shell脚本 Vim文本编辑器 在Linux系统中配置应用服务,实际上就是在修改它的配置文件. 在热门的Linux操作系统中都会默认安装一款超好用的文本编辑器--"v ...