美文网首页
IOS-GCD实现单例模式

IOS-GCD实现单例模式

作者: 温学振 | 来源:发表于2017-12-14 17:56 被阅读10次

单粒是一种设计模式,目的是禁止多次访问内存

在程序运行中 无论创建多少个对象都只有一个实例 (1个类1个对象),只共享一个资源

既然是多次禁止访问内存,并且是只有一个实例,那我们可以从alloc着手

同时因为GCD的dispatch_once_t是在整个程序中只执行一次的

 static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{

    });
那么如何写单例呢? 例子说明
.h文件内

#import <Foundation/Foundation.h>

@interface Person : NSObject
/** 名字 */
@property (nonatomic, strong) NSString *name;

//这里是仿apple的命名方式,可参考 [UIApplication sharedApplication]
+ (instancetype)sharedPerson;

@end
不管share(把1次alloc分享给大家)Person调用多少次 _person的alloc永远只有1次
@interface Person() <NSCopying>

@end

@implementation XMGPerson
.m文件内
static Person *_person;
+ (instancetype)sharedPerson
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        //alloc方法在内部其实是调用了 allocWithZone
        _person = [[self alloc] init];
    });
    return _person;
}
@end
改变他们的地址 也就是直接改变alocWithZone
+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _person = [super allocWithZone:zone];
    });
    return _person;
}
如果调用了person的copy 防止内存有所变化
单粒是不会死的 因为有一个全局的指针一直指着ta
- (id)copyWithZone:(NSZone *)zone
{
    return _person;
}

其实我们也可以将控制器设置成单粒模式,比如说登录控制器。在没有登录的情况下,每次点击某个按钮,都先弹出这个用单粒模式设计过的登录控制器

相关文章

  • IOS-GCD实现单例模式

    单粒是一种设计模式,目的是禁止多次访问内存 在程序运行中 无论创建多少个对象都只有一个实例 (1个类1个对象),只...

  • Android设计模式总结

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

  • python面试题-2018.1.30

    问题:如何实现单例模式? 通过new方法来实现单例模式。 变体: 通过装饰器来实现单例模式 通过元类来创建单例模式...

  • 单例模式

    一、实现单例模式 或者 二、透明的单例模式 三、用代理实现单例模式 四、JavaScript中的单例模式 在Jav...

  • 单例模式和GCD单例实现

    1、传统单例模式2、GCD单例模式3、用宏实现GCD单例模式4、用宏实现GCD单例模式,名称随类名变化而变化 单例...

  • kotlin实现单例模式

    1.懒汉式实现单例模式 2.线程安全懒汉式实现单例模式 3.双重校验懒汉式实现单例模式 4.静态内部类方式实现单例模式

  • 单例模式之枚举类enum

    通过枚举实现单例模式 枚举类实现单例模式的优点 对于饿汉式单例模式和懒汉式单例模式了解的同学,使用以上两种单例模式...

  • 单例模式

    单例模式及C++实现代码单例模式4种实现详解 c++11改进我们的模式之改进单例模式 单例模式(Singleton...

  • 单例模式

    饿汉模式: 懒汉模式: Double CheckLock(DCL)实现单例 静态内部类实现单例 枚举单例 使用容器...

  • iOS 单例

    单例模式实现不能使用继承 定义单例实现 简写 定义单例实现宏

网友评论

      本文标题:IOS-GCD实现单例模式

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