GCD单例-懒汉式&饿汉式
来源:互联网 发布:淘宝助理怎么复制 编辑:程序博客网 时间:2024/05/04 19:59
GCD一次性执行(once)
- 1.原理:onceToken有个初始值为0,当第一次执行函数的时候,会判断onceToken是否是初始值,如果是初始值就执行代码块,反之,不执行代码块,提示:当第一次执行完代码块之前,会自动的修改初始值为非0的值
/// 演示安全性- (void)onceDemo{ for (NSInteger i = 0; i < 1000; i++) { NSLog(@"makrmarkmarkmark"); dispatch_async(dispatch_get_global_queue(0, 0), ^{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSLog(@"只执行一次"); }); }); }}
使用GCD设计单例模式(懒汉式单例)
- 利用GCD的一次性执行,只alloc一次单例对象
- 单利设计模式特点:
- 1.有一个全局的访问点(类方法)
- 2.保存在内存的静态存储区
- 3.在内存中的实例有且只有一个
- 4.声明周期和APP一样长
- 单例的使用场景:
- 1.在一些程序里面必须只有一个的类必须定义成单例(音乐播放器,视频播放器)
- 2.在一些程序开发的过程中, 需要在很多类里面频繁使用的工具类,可以定义成单例
单例的缺点
- 缺点就是保存在静态存储区,生命周期和APP一样长,如果过多的使用单例会造成内存飙升,单例虽好,但是在APP开发中不能过多的使用单例
懒汉式
MusicPlayer.h
#import <Foundation/Foundation.h>@interface MusicPlayer : NSObject// 定义全局访问点+ (instancetype)sharedMusicPlayer;@end
MusicPlayer.m
#import "MusicPlayer.h"@implementation MusicPlayer// 懒汉式单例 : 开发中只用这个// 开发中定义单例的方式+ (instancetype)sharedMusicPlayer{ static id instance; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[self alloc] init]; }); return instance;}@end
使用GCD设计单例模式(饿汉式单例)
- 1.这个方法只在这个类第一次使用的时候,就调用,早于alloc调用,只被调用一次,线程是安全的,
开发时基本不是用这种方式
饿汉式
MusicPlayer.h
#import <Foundation/Foundation.h>@interface MusicPlayer : NSObject// 定义全局访问点+ (instancetype)sharedMusicPlayer;@end
MusicPlayer.m
#import "MusicPlayer.h"@implementation MusicPlayerstatic id instance;// 饿汉式// 这个方法只在这个类第一次使用的时候,就调用;早于alloc调用// 只被调用一次,线程是安全的+ (void)initialize{ instance = [[MusicPlayer alloc] init];}+ (instancetype)sharedMusicPlayer{ return instance;}@end
0 0
- GCD单例-懒汉式&饿汉式
- ios-单例模式饿汉式&GCD&懒汉式&宏方式的实现和条件编译
- 单例懒汉式
- 单例模式 饿汉式 懒汉式
- 【单例模式】饿汉式&懒汉式
- 懒汉式 && 饿汉式 的单例模式
- 单例模式-饿汉式和懒汉式
- 单例设计模式 饿汉式 懒汉式
- 单例设计模式-饿汉式-懒汉式
- 单例模式(懒汉式和饿汉式)
- 单例设计饿汉式懒汉式
- 【单例模式】饿汉式&懒汉式
- 单例模式(饿汉式&懒汉式)
- singleton单例-饿汉式|懒汉式
- 单例模式 饿汉式与懒汉式
- 常用单例模式:饿汉式&懒汉式
- 单例设计模式:饿汉式,懒汉式
- 单例模式 懒汉式 饿汉式
- 文章标题
- caffe的搭建过程以及遇上的各种问题的汇总
- 不使用layer的masksToBounds和cornerRadius来设置圆角
- Spring 配置中的 default-lazy-init="false"
- python3.5学习笔记:linux6.4 安装python3 pip setuptools
- GCD单例-懒汉式&饿汉式
- Android WebView:性能优化不得不说的事
- xStream完美转换XML、JSON
- 如何在不中断整个 Web 服务的情况下停止虚拟站点?(重启站点)
- 次小生成树
- python挑战之level 10
- Run Through the Rain
- Java——集合类 Collection接口和 Map接口
- Linux环境下使用JVM诊断工具排查问题