美文网首页
iOS swift和OC 中单例写法

iOS swift和OC 中单例写法

作者: 9岁就很6 | 来源:发表于2019-02-26 11:00 被阅读9次
单例模式是设计模式中最简单的一种,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象。在我们学习OC的时候写法都比较麻烦,笔者刚接触swift不久,可以说从3.0学会到重学😄,如今4.0出来了,简单复习一下,下面我给大家做给一个对比,
单例
一、OC单例的创建模式

创建单例最初的学习到的写法是判断对象是否为空,为空才创建,但这仅仅是单线程安全,为了多线程安全,创建单例时会加锁,写法如下

+ (instancetype)shareManager{
    @synchronized(self){
        if (!manager) {
            manager = [[self alloc]init];
        }
        return manager;
    }
}

后来发现GCD创建单例更加简便,此时OC中的单例就已经写好了,只要我们在外面调用shareManager这个方法,返回的对象始终是一个,因为dispatch_once只执行一次。

static DataManager *manager = nil;

@implementation DataManager

+ (instancetype)shareManager{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [[self alloc] init];
    });
    return manager;
}

//重写  以下几个方法,一个完整的单例创建就完成啦~~~
+ (id)allocWithZone:(struct _NSZone *)zone{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [super allocWithZone:zone];
    });
    return manager;
}
- (nonnull id)copyWithZone:(nullable NSZone *)zone {
    return manager;
}

- (nonnull id)mutableCopyWithZone:(nullable NSZone *)zone {
    return manager;
}
@end
二、swift单例的创建模式

1、一句话搞定,静态常理。所有地方用到的都是同一个

import Foundation

class SingleOne {
    
    //单例
    static let shared = SingleOne()
    
}

2、使用dispatch_once可以保证其中的代码只执行一次

import Foundation

class SingleTwo {
    
    //单例
    class func shared()->SingleTwo{
        struct Singleton{
            static var onceToken : dispatch_once_t = 0
            static var single:SingleTwo?
        }
        dispatch_once(&Singleton.onceToken,{
            Singleton.single=shareSingleTwo()
        }
        )
        return Singleton.single!
    }
    
}

3、全局常量写法

import Foundation

//全局的常量
let single = SingleThree()

class SingleThree {

    class var shared : SingleThree {
        return single
    }
}

4、

import Foundation

class SingleFour {
    
    static var shared : SingleFour {
        struct Static {
            static let instance : SingleFour = SingleFour()
        }
        return Static.instance
    }
}

喜欢就点个赞吧✌️✌️
有错之处,还请指出,感谢🙏🙏 欢迎加入我的iOS进阶群425234485

相关文章

  • Swift中的单例

    转战swift有几天了,接触到了swift中的单例,下面介绍一下swift中的单例: 仿照OC中的单例的写法,写一...

  • 单例模式的书写

    ARC OC 中的单例 根据OC单例 改写成 Swift 中的单例 OC调用swift,需要#import "单例...

  • iOS swift和OC 中单例写法

    单例模式是设计模式中最简单的一种,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关...

  • swift语法-14单例

    swift语法-14单例 OC中单例 Swift中单例 简写 Swift中最长用的方法

  • ios~单例模式:

    在iOS OC中,一般我们都是用官方推荐的写法来写单例:GCD方式单例 分析单例 static SharedPer...

  • iOS开发技巧(Swift版):单例创建

    在些项目的时候, 我们往往会用到单例模式,.相比OC中单例的写法, 结合Swift的语法特点,总结一下3种单例模式...

  • OC和Swift单例的写法

    一 、OC中单例的写法:1.普通单例的写法 2. 利用多线程来写单例 #pragma mark --- 普通单例写...

  • OC和Swift中的单例写法

    单例: 在整个项目中只有一个实例,并提供一个类方法供全局调用 1.单例的优点 单例可以保证系统中该类有且仅有一个实...

  • iOS 单例模式

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

  • iOS - 单例创建

    Swift创建单例 代码如下:Swift5 对应OC创建单例

网友评论

      本文标题:iOS swift和OC 中单例写法

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