单例在Objective-C中得到了很多的应用,什么时候需要使用单例呢?

  在程序运行过程中需要使用一个对象,这个对象中包含特定的功能和属性,而且这个对象是静态的,而且整个程序只需要拥有一个该对象例如:

  1.控制程序执行的命令器(我也不知道是什么)

  2.管理数据库

  3.音效控制

  4.文件处理

  .........

1.单例模式的要点:

  显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

2.单例模式的优点:

  1.实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例。
  2.灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程
 
IOS中的单例模式
  在objective-c中要实现一个单例类,至少需要做以下四个步骤:
  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单例相关推荐

  1. 2021年大数据常用语言Scala(二十九):scala面向对象 单例对象

    目录 单例对象 定义object - 掌握 伴生对象 - 掌握 apply方法 - 掌握 main方法 单例对象 Scala中没有static关键字,但是它支持静态 如果要定义静态的东西,统统定义到o ...

  2. Android/Java 单例使用总结

    学而时习之,温故而知新. 什么是单例? 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例 单例模式特点 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3. ...

  3. python基础知识整理 第七节:单例设计模式、异常、模块、包、制作模块、文件

    1.单例设计模式 单例设计模式就是为对象在内存中分配空间的时候,永远只会返回一个唯一的固定的内存空间.这样就能保证在内存中这个类的对象只有唯一的一份,这个就叫做单例.(为对象分配空间使用的是内置方法_ ...

  4. Singleton 单例模板

    1 // singleton.h 2 3 #ifndef SINGLETON_H 4 #define SINGLETON_H 5 6 // 单例基类模板 7 template <class T& ...

  5. 设计模式C#描述——单例与多例模式

    设计模式C#描述--单例与多例模式 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式有以下特点: 单例类只能有一个实例. 单例 ...

  6. 【Qt】QtCreator中的单例编程(以ActionManager为例)

    1.ActionManager简介 ActionManager类负责注册菜单和菜单项以及键盘快捷键. ActionManager的公共函数都是静态的,只有使用信号时,才用到单例. 2.ActionMa ...

  7. spring 单例 获取多例的位_Spring 获取单例流程(一)

    读完这篇文章你将会收获到 在 getBean 方法中, Spring 处理别名以及 factoryBean 的 name Spring 如何从多级缓存中根据 beanName 获取 bean Spri ...

  8. 单例测试模式中【饿汉式】与【懒汉式】的区别

    package day25.thread;/** /*** @author Mr Chen* @create 2018-10-09 18:37* 单例测试模式:保证类在内存中只有一个对象*/ publ ...

  9. Swift中编写单例的正确方式

    本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...

  10. 懒汉式单例和饿汉式单例优缺点

    1.时间和空间 比较上面两种写法:懒汉式是典型的时间换空间,也就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间.当然,如果一直没有人使用的话,那就不会创建实例,则节约内存空间. 饿汉式 ...

最新文章

  1. Freeze 风暴导致的IOPS飙升 - 追溯与解法
  2. (66)全局句柄表,遍历全局句柄表
  3. 自建邮件服务器更给力?
  4. Android之中获取应用程序(包)的信息-----PackageManager的使用(一)
  5. 7-5 列车厢调度 (25 分)
  6. php rsa aes混合加密,手动演示RSA和AES混合加密过程
  7. (138)FPGA面试题-Verilog HDL中function和task的区别(二)
  8. 03-NIO通讯模型
  9. android测距传感器,测距测量仪(专业测量软件)
  10. 4.16_template_method_行为型模式:模板方法模式
  11. 车辆及其应用的车载语音识别显示方法及系统与流程
  12. C# ObjectCache、OutputCache缓存
  13. 程序员常用的数学公式
  14. HTTP和HTTPS的工作原理及区别
  15. vue vuex 挂载_【HAVENT原创】Vue 中使用 Vuex 的几种写法
  16. 完美发布带摘要的dedecms幻灯片代码
  17. 无语!35 岁华人程序员涉嫌诈骗 150 万美元抗疫贷款,在美国遭 FBI 逮捕
  18. CSU 1725 加尔鲁什·地狱咆哮对阵虚灵大盗拉法姆(dp)
  19. System.setOut()重定向输出解释
  20. JSP+ssm计算机毕业设计居民小区安全巡检系统服务端设计65261【源码、数据库、LW、部署】

热门文章

  1. python comprehensions_python 列表生成式 List Comprehensions
  2. java导入包写在第二行的吗_使用Java命令行方式导入第三方jar包来运行Java程序的命令...
  3. 组态王字符串转换整数_字符串转换整数(LC8)
  4. react页面数据过多怎么办_性能!!让你的 React 组件跑得再快一点,收藏
  5. python def main return,python中main()函数写法
  6. 小程序页面跳转传参参数值为url时参数时 会出现丢失
  7. Uber开源TensorFlow框架工具箱Ludwig,无需编码即可进行深度学习开发
  8. sql根据年月日查询注册数或者和值
  9. mysql 监控工具
  10. Learning C# by Developing Games with Unity 5.x(2nd) 学习