单例

作者: Gunks | 来源:发表于2018-04-22 10:59 被阅读0次

解析:

顾名思义就是只有一个实例,也就是内存唯一地址,通过全局的一个入口对这个实例对象进行访问,实现在不同的窗口之前传递数据

Non-ARC(非arc)

#import <Foundation/Foundation.h>

@interface NonARCSingleton : NSObject

+(NonARCSingleton *)sharedInstance;

@end
#import "NonARCSingleton.h"

@implementation NonARCSingleton

//定义一个全局变量,该变量存放在静态区,与该类进行绑定,类销毁的时候,该变量才会被销毁
static NonARCSingleton *sharedInstance=nil;

//重写allocWithZone方法 为对象分配一个内存 并用retain持有该对象
+(id)allocWithZone:(struct _NSZone *)zone{
    return [[self sharedInstance] retain];
}

//一个类方法,判断静态变量是否被初始化了,如果初始化了直接返回,没有就初始化,因为有了这一步,所以事先了单例
+(NonARCSingleton *)sharedInstance{
    if (sharedInstance == nil) {
        sharedInstance = [[super allocWithZone:NULL]init];
    }
    return sharedInstance;
}

//剩下的就适当重写引用计数哪些方法

@end

ARC

#import <Foundation/Foundation.h>

@interface ARCSingleton : NSObject

+(ARCSingleton *)sharedInstance;

@end

#import "ARCSingleton.h"

@implementation ARCSingleton
//定义一个全局变量,该变量存放在静态区,与该类进行绑定,类销毁的时候,该变量才会被销毁
static ARCSingleton  *sharedInstance=nil;

//上述是重写allocWithZone方法,定义一个dispatch_once_t的静态变量,确保初始化代码只会执行一次,dispatch_once函数需要传入两个参数,第二个是代码块,一但类被初始化了该代码块永远不再执行,确保内存空间只会执行一次
+(id)allocWithZone:(struct _NSZone *)zone{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [super allocWithZone:zone];
    });
    return sharedInstance;
}

//与上面的方法都能完成单例
+(ARCSingleton *)sharedInstance{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[ARCSingleton alloc]init];
    });
    return sharedInstance;
}

//根据需求,选择重写 如果支持copy,则需要重写该方法,并直接返回静态实例
-(id)copyWithZone:(NSZone *)zone{
    return sharedInstance;
}

@end

相关文章

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • IOS单例模式的底层原理

    单例介绍 本文源码下载地址 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一...

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • 2020-11-02-Spring单例 vs. 单例模式

    Spring 单例不是 Java 单例。本文讨论 Spring 的单例与单例模式的区别。 前言 单例是 Sprin...

  • IOS学习笔记之单例

    单例介绍 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一种常用的软件设计模...

  • OC - 单例模式

    导读: 一、什么是单例模式 二、单例的作用 三、常见的单例类 四、自定义单例类的方法 一、什么是单例模式 单例模式...

  • 单例

    单例 单例宏

  • 单例模式

    特点 单例类只有1个实例对象 该单例对象必须由单例类自行创建 单例类对外提供一个访问该单例的全局访问点 结构 单例...

  • 关于java单例模式,这篇已经讲得很清楚了,建议收藏!

    概念 java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。 特点 单例...

  • 单例

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

网友评论

      本文标题:单例

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