美文网首页
iOS基础知识梳理 - 单例模式

iOS基础知识梳理 - 单例模式

作者: babyloveblues | 来源:发表于2019-08-05 16:53 被阅读0次

一次性执行

还没有被执行的时候onceToken的值是0,如果已经被执行过了onceToken会变成非0

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
//    for (int i =0; i<100; i++) {
//        [self demo1];
//    }
    for (int i =0; i<100; i++) {
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            
            [self demo1];
            
        });
    }    
}

// 一次性执行
// 线程安全的
- (void)demo1{

    static dispatch_once_t onceToken;
    NSLog(@"%ld",onceToken);
    dispatch_once(&onceToken, ^{
        NSLog(@"demo");
    });
    
}

单例模式

场景:
(1) 网易云音乐的播放器界面
(2)固定的配置文件(plist/text)需要把这个配置转化成对象,对配置文件进行修改

单例实现的两种方式

单例的实现方法有两种,一种是使用dispatch_once,另一种则是使用同步锁,他们的具体实现如下
.h文件

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface BBConfig : NSObject

// 返回唯一的一个对象(单例):整个系统中只有唯一一个类的对象(性能高,苹果推荐写法)
+ (instancetype)config;

// 同步锁实现单例(性能差)
+ (instancetype)configSync;
@end

NS_ASSUME_NONNULL_END

.m文件

#import "BBConfig.h"

@implementation BBConfig

+ (instancetype)config{
    static BBConfig *instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[BBConfig alloc] init];
    });
    return instance;
}

+ (instancetype)configSync{
    static BBConfig *instance;
    
    @synchronized (self) {
        if (instance == nil) {
            instance = [[BBConfig alloc] init];
        }
    }
    return instance;
}

@end

性能上来说,dispatch_once的性能较好,因为同步锁synchronized涉及到线程的调度(主要是等待),同事dispatch_once也是苹果推荐的单例写法。

相关文章

  • 单例

    iOS单例模式iOS之单例模式初探iOS单例详解

  • iOS 单例模式

    关于单例模式的详解,看完这几篇,就完全了然了。iOS 单例模式iOS中的单例模式iOS单例的写法

  • iOS基础知识梳理 - 单例模式

    一次性执行 还没有被执行的时候onceToken的值是0,如果已经被执行过了onceToken会变成非0 单例模式...

  • iOS 单例模式 or NSUserDefaults

    本文内容:iOS的单例模式NSUserDefaults的使用总结:iOS单例模式 and NSUserDefaul...

  • 单例模式 Singleton Pattern

    单例模式-菜鸟教程 iOS中的设计模式——单例(Singleton) iOS-单例模式写一次就够了 如何正确地写出...

  • 【设计模式】单例模式

    学习文章 iOS设计模式 - 单例 SwiftSingleton 原理图 说明 单例模式人人用过,严格的单例模式很...

  • iOS模式设计之--创建型:1、单例模式

    iOS模式设计之--1、单例模式

  • iOS单例模式容错处理

    ios 单例模式容错处理 1、单例模式的使用和问题解决 在ios开发的过程中,使用单例模式的场景非常多。系统也有很...

  • 谈一谈iOS单例模式

    这篇文章主要和大家谈一谈iOS中的单例模式,单例模式是一种常用的软件设计模式,想要深入了解iOS单例模式的朋友可以...

  • 单例模式

    单例模式 最常用的单例模式,经常在项目中见,梳理后发现各种各样的单例,索性梳理一下。 自己创建自己,提供了访问其唯...

网友评论

      本文标题:iOS基础知识梳理 - 单例模式

      本文链接:https://www.haomeiwen.com/subject/hngmdctx.html