看完MJ讲解的单例后的个人总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了看完MJ讲解的单例后的个人总结相关的知识,希望对你有一定的参考价值。

1、单例的介绍

单例是ios常用的开发模式的一种。

2、什么是单例

单例就是一个类只创建一个对象,只分配一次内存空间。

3、单例的应用场景

1)系统的单例:  [UIApplication sharedApplication];

2)应用中的单例:qq的背景图等

4、单例的注意事项

1)永远只分配一块内存来创建对象

2)提供一个类方法,返回内部唯一的一个对象(一个实例)

3)最好保证init方法也只初始化一次

5、单例的创建

1)重写分配内存方法

//重写分配内存的方法
+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
    static dispatch_once_t once_Token;
    dispatch_once(&once_Token, ^{
        //保证只分配一次内存
        _instance = [super allocWithZone:zone];
        
    });
    return _instance;
    
}

2)创建类方法

//创建share方法
+ (instancetype)sharePerson
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
       //只被init一次
        _instance = [[self alloc]init];
        
    });
    return _instance;
}

3)重写init方法

- (instancetype)init
{
    if (self = [super init]) {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            //赋值,初始化资源
        });
        
    }
    return self;
}

6、单例的调用和输出结果

1)单例的调用

Person * mark = [Person sharePerson];
    Person * mary = [[Person alloc]init];
    NSLog(@"mark ---%p  mary----  %p ",mark,mary);

 2)单例的输出结果

2016-03-02 21:38:30.743 Single[2104:190961] mark ---0x7fe6325488e0  mary----  0x7fe6325488e0 

 

以上是关于看完MJ讲解的单例后的个人总结的主要内容,如果未能解决你的问题,请参考以下文章

片段作为 Android 中的单例

性能比较好的单例写法

设计模式 - 单例模式(详解)看看和你理解的是否一样?

Java 单例模式探讨

面试官:我们来简单聊聊的单例?那我可有话说了

面试官:我们来简单聊聊的单例?那我可有话说了