Objective-C单例
单例在Objective-C中得到了很多的应用,什么时候需要使用单例呢?
在程序运行过程中需要使用一个对象,这个对象中包含特定的功能和属性,而且这个对象是静态的,而且整个程序只需要拥有一个该对象例如:
1.控制程序执行的命令器(我也不知道是什么)
2.管理数据库
3.音效控制
4.文件处理
.........
1.单例模式的要点:
显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
2.单例模式的优点:
1、为单例对象实现一个静态实例,并初始化,然后设置成nil,
2、实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例,
3、重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,
4、适当实现allocWitheZone,copyWithZone,release和autorelease。
//1,定义一个静态的全局的变量
static Settings *sharedSettings = nil; //2,创建一个类方法,用来返回该类实例
+ (Settings *)sharedInstance { @synchronized(self){ if(sharedSettings == nil){ sharedSettings = [[self alloc] init]; //做一些初始化操作 } } return sharedSettings;
} //3,重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例, + (id)allocWithZone:(NSZone *)zone { @synchronized(self) { if (sharedSettings == nil) { sharedSettings = [super allocWithZone:zone]; } } return sharedSettings;
} //4、适当实现allocWitheZone,copyWithZone,release和autorelease
+ (id)copyWithZone:(NSZone *)zone { return self;
} - (id)retain { return self;
} - (unsigned)retainCount { return UINT_MAX;
} - (oneway void)release {
} - (id)autorelease { return self;
}
转载于:https://www.cnblogs.com/azxfire/p/3770323.html
Objective-C单例相关推荐
- 2021年大数据常用语言Scala(二十九):scala面向对象 单例对象
目录 单例对象 定义object - 掌握 伴生对象 - 掌握 apply方法 - 掌握 main方法 单例对象 Scala中没有static关键字,但是它支持静态 如果要定义静态的东西,统统定义到o ...
- Android/Java 单例使用总结
学而时习之,温故而知新. 什么是单例? 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例 单例模式特点 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3. ...
- python基础知识整理 第七节:单例设计模式、异常、模块、包、制作模块、文件
1.单例设计模式 单例设计模式就是为对象在内存中分配空间的时候,永远只会返回一个唯一的固定的内存空间.这样就能保证在内存中这个类的对象只有唯一的一份,这个就叫做单例.(为对象分配空间使用的是内置方法_ ...
- Singleton 单例模板
1 // singleton.h 2 3 #ifndef SINGLETON_H 4 #define SINGLETON_H 5 6 // 单例基类模板 7 template <class T& ...
- 设计模式C#描述——单例与多例模式
设计模式C#描述--单例与多例模式 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式有以下特点: 单例类只能有一个实例. 单例 ...
- 【Qt】QtCreator中的单例编程(以ActionManager为例)
1.ActionManager简介 ActionManager类负责注册菜单和菜单项以及键盘快捷键. ActionManager的公共函数都是静态的,只有使用信号时,才用到单例. 2.ActionMa ...
- spring 单例 获取多例的位_Spring 获取单例流程(一)
读完这篇文章你将会收获到 在 getBean 方法中, Spring 处理别名以及 factoryBean 的 name Spring 如何从多级缓存中根据 beanName 获取 bean Spri ...
- 单例测试模式中【饿汉式】与【懒汉式】的区别
package day25.thread;/** /*** @author Mr Chen* @create 2018-10-09 18:37* 单例测试模式:保证类在内存中只有一个对象*/ publ ...
- Swift中编写单例的正确方式
本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...
- 懒汉式单例和饿汉式单例优缺点
1.时间和空间 比较上面两种写法:懒汉式是典型的时间换空间,也就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间.当然,如果一直没有人使用的话,那就不会创建实例,则节约内存空间. 饿汉式 ...
最新文章
- Freeze 风暴导致的IOPS飙升 - 追溯与解法
- (66)全局句柄表,遍历全局句柄表
- 自建邮件服务器更给力?
- Android之中获取应用程序(包)的信息-----PackageManager的使用(一)
- 7-5 列车厢调度 (25 分)
- php rsa aes混合加密,手动演示RSA和AES混合加密过程
- (138)FPGA面试题-Verilog HDL中function和task的区别(二)
- 03-NIO通讯模型
- android测距传感器,测距测量仪(专业测量软件)
- 4.16_template_method_行为型模式:模板方法模式
- 车辆及其应用的车载语音识别显示方法及系统与流程
- C# ObjectCache、OutputCache缓存
- 程序员常用的数学公式
- HTTP和HTTPS的工作原理及区别
- vue vuex 挂载_【HAVENT原创】Vue 中使用 Vuex 的几种写法
- 完美发布带摘要的dedecms幻灯片代码
- 无语!35 岁华人程序员涉嫌诈骗 150 万美元抗疫贷款,在美国遭 FBI 逮捕
- CSU 1725 加尔鲁什·地狱咆哮对阵虚灵大盗拉法姆(dp)
- System.setOut()重定向输出解释
- JSP+ssm计算机毕业设计居民小区安全巡检系统服务端设计65261【源码、数据库、LW、部署】
热门文章
- python comprehensions_python 列表生成式 List Comprehensions
- java导入包写在第二行的吗_使用Java命令行方式导入第三方jar包来运行Java程序的命令...
- 组态王字符串转换整数_字符串转换整数(LC8)
- react页面数据过多怎么办_性能!!让你的 React 组件跑得再快一点,收藏
- python def main return,python中main()函数写法
- 小程序页面跳转传参参数值为url时参数时 会出现丢失
- Uber开源TensorFlow框架工具箱Ludwig,无需编码即可进行深度学习开发
- sql根据年月日查询注册数或者和值
- mysql 监控工具
- Learning C# by Developing Games with Unity 5.x(2nd) 学习