美文网首页
iOS设计模式-单例

iOS设计模式-单例

作者: 小_黑_屋 | 来源:发表于2018-01-02 15:36 被阅读0次

直接上代码,后面详解

  • OC实现
#import "OCSingleTool.h"

@implementation OCSingleTool

static OCSingleTool * tool = nil;

+ (instancetype)shareTool {
    return [[self alloc]init];
}

+ (instancetype)allocWithZone:(struct _NSZone *)zone {
    if (tool == nil) {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            tool = [super allocWithZone:zone];
        });
    }
    return tool;
}


- (id)copy {
    return tool;
}

- (id)mutableCopy {
    return tool;
}
@end
  • swift实现
import UIKit

class SwiftSingleTool: NSObject {
    static let shareTool = SwiftSingleTool()
    private override init() {}
    override func copy() -> Any {
        return SwiftSingleTool.shareTool
    }
    override func mutableCopy() -> Any {
        return SwiftSingleTool.shareTool
    }
}

详解
  • 注:如果不实现copy,mutableCopy方法,在掉用的时候回报错,说你未实现copyWithZone,mutableCopyWithZone方法
    • 那为啥我们不按报错提示的去实现copyWithZone和mutableCopyWithZone的方法?因为那样还要去遵守协议,比较麻烦。
  • OC
    • OC这里基本没啥解释的,注意线程安全就可以了。
  • swift
    • swift中let关键字其本身就是线程安全的,所以不需要once函数

这里用到了copy,就顺便总结一下
  • 非集合对象
    • copy的对象如果是不可变对象,则是浅拷贝。因为我们无法对其值进行改变。copy的对象如果是可变对象,则是深拷贝。因为其类型改变了。
    • mutableCopy都试深拷贝。因为我们需要一个新的可变的对象,以避免值改变的时候影响之前的值。
  • 集合对象
    • copy对象是不可变对象,则是浅拷贝,其它情况都是单层深拷贝(即:容器是新地址,内容是相同的地址)。原因于上面基本相同。
\ 非集合类型(可变) 非集合类型(不可变) 集合类型(可变) 集合类型(不可变)
copy 单层深
mutableCopy 单层深 单层深

相关文章

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

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

  • 单例模式 Singleton Pattern

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

  • 【设计模式】单例模式

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

  • 单例

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

  • 谈一谈iOS单例模式

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

  • iOS知识梳理3:设计模式

    iOS有哪些常见的设计模式?单例模式/委托模式/观察者模式/MVC模式 单例模式 单例保证了应用程序的生命周期内仅...

  • iOS 单例模式

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

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • 单例的2种写法

    单例模式是iOS开发中最常用的设计模式,iOS的单例模式有两种官方写法,如下: 1,常用写法 import "Se...

  • IOS 设计模式

    IOS开发中几种设计模式:单例模式、观察者模式、MVC模式、代理模式 一、单例模式 场景:确保程序运行期某个类,只...

网友评论

      本文标题:iOS设计模式-单例

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