单例模式是iOS开发中最常用的设计模式,单例需要能达到的目的是:

1. 封装一个共享的资源;

2. 提供一个固定的实例创建方法;

3. 提供一个标准的实例访问接口。

iOS中的单例模式有两种写法:

1、单例的常用写法:

#import "ServiceManager.h"static ServiceManager *defaultManager;@implementation ServiceManager+(ServiceManager *)defaultManager{if(!defaultManager)defaultManager=[[self allocWithZone:NULL] init];return defaultManager;
}@end

2、用GCD创建单例类

#import "ServiceManager.h"@implementation ServiceManager+ (ServiceManager *)sharedManager {static dispatch_once_t predicate;static ServiceManager *sharedManager;dispatch_once(&predicate, ^{sharedManager = [[ServiceManager alloc] init];});return sharedManager;
}@end// 其中dispatch_once函数只执行一次。

注意:大家平时写单例的时候可能没注意到,如果别人init了这个类,就会创建一个新的对象,要保证永远都只为单例对象分配一次内存空间,写法如下:

+(instancetype) sharedManager {static dispatch_once_t onceToken ;dispatch_once(&onceToken, ^{_defaultManager = [[super allocWithZone:NULL] init] ; }) ;return _defaultManager ;
}+(id) allocWithZone:(struct _NSZone *)zone {return [ServiceManager sharedManager] ;
}-(id) copyWithZone:(struct _NSZone *)zone {return [ServiceManager sharedManager] ;
}

在对象创建的时候,无论是 alloc 还是 new,都会调用到 allocWithZone: 方法;使用拷贝创建对象时,会调用 copyWithZone:,mutableCopyWithZone:方法;那么,重写这些方法,就可以让创建的对象唯一。

iOS之单例模式的写法相关推荐

  1. iOS开发笔记-两种单例模式的写法

    iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h"st ...

  2. Java单例模式优化写法

    转载自 http://blog.csdn.net/diweikang/article/details/51354982 Java单例模式优化写法 方法一:推荐 [java] view plain co ...

  3. 设计模式:单例模式的写法(基础写法和线程安全写法)

    单例模式的写法非常多.先给出一种最基础的写法: (A种写法): package singleton;public class SingletonInstance {private static Sin ...

  4. Java单例模式推荐写法-双重检测机制实现单例模式

    本文为joshua317原创文章,转载请注明:转载自joshua317博客 Java单例模式推荐写法-双重检测机制实现单例模式 - joshua317的博客 Java单例模式推荐写法--双重检测机制实 ...

  5. iOS严谨单例写法/可继承单例

    单例模式在iOS开发中可能算是最常用的模式之一了,但是由于OC本身的语言特性,想要写一个正确的单例模式相对来说比较麻烦. 今天就来说一说, 单例创建的方式和严谨的单例写法及可继承单例编写. 基本单例的 ...

  6. iOS开发-单例模式

    单例模式是一种非常常见的设计模式,之前文章中UIApplication就是一种典型的单例模式,单例理解起来叶很简单,就不是不管如果访问始终只有一个实例化对象,定义全局共享的变量,如果对象是空则初始化一 ...

  7. 玩转iOS开发:《iOS设计模式 — 单例模式》

    作者感言 有一段时间没有发博客了, 刚好现在忙完项目的需求, 现在可以闲下来写写博客, 顺便自己给自己复习巩固一下知识, 不过我在这里又要吐槽一句, 项目中遇到了一个单例的问题, 让我感到非常的蛋疼, ...

  8. java基础巩固-宇宙第一AiYWM:为了维持生计,单例模式阅读总结【单例模式不同写法、在JDK中的应用】~整起

    无论是哪种设计模式,自己啃哪本书哪个博客去学,都会考虑最起码的两个问题: 我到底该咋用这种设计模式呀,直接把书上的.百度上的.博客上-的程序们抄过来? 那我该咋用呢?就算把人家程序抄过来,抄过来放在哪 ...

  9. iOS设计模式 ——单例模式详解以及严格单例模式注意点

    一.我们常用的单例有哪些? [[UIApplication sharedApplication] statusBarStyle];//系统中的单例模式,通过它获取到状态栏的style [NSNotif ...

最新文章

  1. [HDU] Tr A
  2. DOM性能瓶颈与Javascript性能优化
  3. VC2019消息框编程总结
  4. Java word 内容读取
  5. ubuntu中查找文件后高亮_vim查找替换及取消高亮
  6. objective-c 2.0编程语言,Objective-C 2.0编程快速上手 EXE版[12MB]
  7. Go语言的基准测试简单示例
  8. [转载].NET开发常用的10条实用代码
  9. Chrome插件GitZip(下载github项目中的部分文件)
  10. 守望先锋中的netcode_如何跟踪守望先锋中的化妆品和事件物品
  11. 数值积分求解卫星轨道长(Python)
  12. 教案用计算器计算机,用计算器计算教案
  13. 规格型号、购方名称、地址备注等格式有误、特殊字符-无法开票?
  14. 防骗数据库,查询骗子电话QQ等
  15. 阿里高维向量检索方法NSG介绍
  16. Imu_heading源码阅读(三)——Ransac_fitline部分
  17. 微信分享,实现自定义标题、描述、图标
  18. 智能停车场(可检测车牌通过oled屏幕显示车牌号)语音+LED灯提示该车辆所停车位
  19. 【转】8核、6核、4核、双核CPU是什么意思
  20. echart 广州3d_ECharts3D地图(详细示例——附有具体注释)

热门文章

  1. Python【每日一问】16
  2. JAVA获取系统相关的信息
  3. [学习笔记]带修改主席树
  4. PHP中被忽略的性能优化利器:生成器
  5. Spark学习之路 (五)Spark伪分布式安装
  6. bzoj1079: [SCOI2008]着色方案
  7. 28-高级特性之作用域(2)
  8. 《数据结构与算法Python语言描述》习题第二章第二题(python版)
  9. 一个filter子查询测试
  10. 10-7 B2-1查找订单数最多的员工信息 (20 分)