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

设计模式05--单例模式(iOS)

作者: YotrolZ | 来源:发表于2017-12-22 14:12 被阅读26次

1、单例模式简述

  • 一个类有且仅有一个实例,并且自行实例化向整个系统提供。

2、单例模式UML类图

  • 单例模式

3、单例模式示意代码

  • SingletonA
/*********  SingletonA.h   **********/
@interface YSingletonA : NSObject
+ (instancetype)sharedInstance;
@end

/*********  SingletonA.m   **********/
@implementation YSingletonA

static YSingletonA *_instance = nil;
+ (instancetype)sharedInstance {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [[[self class] alloc] init];
    });
    return _instance;
}
@end

/*********  使用   **********/
YSingletonA *singleton1 = [YSingletonA sharedInstance];
NSLog(@"%@", singleton1);
YSingletonA *singleton2 = [YSingletonA sharedInstance];
NSLog(@"%@", singleton2);

YSingletonA *singleton3 = [[YSingletonA alloc] init];
NSLog(@"%@", singleton3);
YSingletonA *singleton4 = [[YSingletonA alloc] init];
NSLog(@"%@", singleton4);

YSingletonA *singleton5 = [YSingletonA new];
NSLog(@"%@", singleton5);
YSingletonA *singleton6 = [YSingletonA new];
NSLog(@"%@", singleton6);

/*
 运行结果:
 <YSingletonA: 0x60000000b550>
 <YSingletonA: 0x60000000b550>
 
 <YSingletonA: 0x60c00000bc30>
 <YSingletonA: 0x60400000b440>
 
 <YSingletonA: 0x60400000b450>
 <YSingletonA: 0x60c00000a9f0>

YSingletonA调用sharedInstance方法可以做到多次创建的实例是同一个
但是<无法做到>调用原有的init方法或者new方法创建的实例也是同一个
YSingletonA违背了单例类有且仅有一个实例的定义,或者说做的不够完善
 */
  • SingletonB
/*********  SingletonB.h   **********/
@interface YSingletonB : NSObject <NSCopying, NSMutableCopying>
+ (instancetype)sharedInstance;
@end

/*********  SingletonB.m   **********/
@implementation YSingletonB

static YSingletonB *_instance = nil;
+ (instancetype)sharedInstance {
    return [[self alloc] init];
}

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

- (id)copyWithZone:(NSZone *)zone {
    return _instance;
}

- (id)mutableCopyWithZone:(NSZone *)zone {
    return _instance;
}

@end

/*********  使用   **********/
YSingletonB *singleton1 = [YSingletonB sharedInstance];
NSLog(@"%@", singleton1);
YSingletonB *singleton2 = [YSingletonB sharedInstance];
NSLog(@"%@", singleton2);

YSingletonB *singleton3 = [[YSingletonB alloc] init];
NSLog(@"%@", singleton3);
YSingletonB *singleton4 = [[YSingletonB alloc] init];
NSLog(@"%@", singleton4);

YSingletonB *singleton5 = [YSingletonB new];
NSLog(@"%@", singleton5);
YSingletonB *singleton6 = [YSingletonB new];
NSLog(@"%@", singleton6);


YSingletonB *singleton7 = [singleton5 copy];
NSLog(@"%@", singleton7);
YSingletonB *singleton8 = [singleton5 mutableCopy];
NSLog(@"%@", singleton8);

/*
 <YSingletonB: 0x6080000069a0>
 <YSingletonB: 0x6080000069a0>
 
 <YSingletonB: 0x6080000069a0>
 <YSingletonB: 0x6080000069a0>
 
 <YSingletonB: 0x6080000069a0>
 <YSingletonB: 0x6080000069a0>
 
 <YSingletonB: 0x6080000069a0>
 <YSingletonB: 0x6080000069a0>

YSingletonB调用sharedInstance方法,alloc,init方法,new方法,甚至包括copy、mutableCopy方法我们得到的都是用一个实例
 */

相关文章

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

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

  • 设计模式05--单例模式(iOS)

    1、单例模式简述 一个类有且仅有一个实例,并且自行实例化向整个系统提供。 2、单例模式UML类图 单例模式 3、单...

  • 单例模式 Singleton Pattern

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

  • 【设计模式】单例模式

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

  • 单例

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

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

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

  • 单例模式Java篇

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

  • IOS 设计模式

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

  • 面向对象设计模式-6大原则

    什么是设计模式? iOS内平时有很多设计模式,如:delegate,单例模式,观察者模式,工厂模式…… 设计模式是...

  • 谈一谈iOS单例模式

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

网友评论

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

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