iOS-singleton(单例)三种创建方式
来源:互联网 发布:淘宝订单险加入条件 编辑:程序博客网 时间:2024/05/19 03:17
单例介绍
单例模式: 一个类只有一个实例对象。
使用场合:在整个应用程序共享一份资源(这份资源只需要创建初始化一次)。
ARC实现单例:
在类的内部提供一个static修饰的全局变量static SingletonVC * _singletonVC;;
提供一个类方法方便外界访问+ (instancetype)share;;
重写initWithZone方法,保证永远只为单例分配一次存储空间。
单例写法
第一种:GCD的一次函数(dispatch_once_t)
推荐指数:?????
#import "SingletonVC.h"// 创建静态对象 防止外部访问static SingletonVC * _singletonVC;@implementation SingletonVC+ (instancetype)allocWithZone:(struct _NSZone *)zone{ static dispatch_once_t onceToken; // 一次函数 dispatch_once(&onceToken, ^{ if (_singletonVC == nil) { _singletonVC = [super allocWithZone:zone]; } }); return _singletonVC;}+ (instancetype)share{ return [[self alloc] init];}@end
第二种:线程锁
推荐指数:???
#import "SingletonVC.h"// 创建静态对象 防止外部访问static SingletonVC * _singletonVC;@implementation SingletonVC+ (instancetype)allocWithZone:(struct _NSZone *)zone{ //线程锁 @synchronized (self) { if (_singletonVC == nil) { _singletonVC = [super allocWithZone:zone]; } } return _singletonVC;}+ (instancetype)share{ return [[self alloc] init];}@end
第三种:懒加载模式
推荐指数:?
不推荐使用这种方法,线程不安全。
#import "SingletonVC.h"static SingletonVC * _singletonVC;@implementation SingletonVC+ (instancetype)allocWithZone:(struct _NSZone *)zone{ if (_singletonVC == nil) { _singletonVC = [super allocWithZone:zone]; } return _singletonVC;}+ (instancetype)share{ return [[self alloc] init];}@end
阅读全文
0 0
- iOS-singleton(单例)三种创建方式
- 创建单例Singleton的三种方式:懒汉式、饿汉式、枚举类
- 创建单例模式(Singleton)的几种方式
- 单例模式的三种实现方式:singleton
- 三、创建型模式:单例模式(SINGLETON)
- 单例模式(Singleton pattern)的三种写法(含枚举实现方式)
- ios单例Singleton
- iOS--单例(Singleton)
- 单例模式(Singleton)的创建
- Singleton---单例模式(创建型)
- 创建型:单例模式(singleton)
- 单例模式(Singleton)的创建
- iOS 21种设计模式之单例(Singleton)
- iOS 21种设计模式之单例(Singleton)
- ios 单例模式(singleton)
- iOS的单例模式(singleton)
- iOS的单例模式(singleton)
- iOS开发单例模式(Singleton)
- javaScript之实现基本的增删改查功能
- Mac OS X EI Capitan 10.11.16 自带php、apache,安装mysql以及升级PHP7说明
- Hibench使用
- java基础第二十七天 数据库
- IE8,IE7 Javascript获取 classname的方法
- iOS-singleton(单例)三种创建方式
- 基数排序
- maven私有仓库nexus3.5搭建与使用
- 矩-图像处理中的距
- java 异常、断言和日志
- 在Debian上安装Nodejs方法
- Oracle的rownum原理和使用
- 天天学Linux命令7--rmdir命令
- Java基础学习总结——Java主要技术点总结