zoukankan      html  css  js  c++  java
  • 单例模式

      进来看见好多人在说创建单例对象的问题,本着大家共同交流的原则.本人也写了一个自己的观点.可能和一些大神的不一样.在此本人还建议,如果你经常要用单例对象,可以把单例代码定义为一个带参数的宏

    这里是在ARC模式下创建单例对象,在MRC下我们还要考率更多的内存问题,代码已在下面写出,被我注释了.

    单例模式:设计思路 

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

    (2)提供一个类方法,返回内部唯一的一个变量

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

    #import "AudioTool.h"

    @implementation AudioTool

    static id _instance;

    + (instancetype)sharedAudioTool{

        /**

            并且这里只需要创建一次

            GCD里面提供一次性创建代码的东西  这里我们用GCD而不用互斥锁 ,是因为GCD的工作效率要不互斥锁高(可以)

            dispatch_once 会自动帮我们加锁,来解决多线程操作同一资源的问题,不需要我们再去考虑了

         */

        static dispatch_once_t onceToken;

        dispatch_once(&onceToken, ^{

            NSLog(@"---shared--xxxx----");

            _instance = [[self alloc] init];

        });

        

        return _instance;

    }

    + (instancetype)allocWithZone:(struct _NSZone *)zone{

        static dispatch_once_t onceToken;

        dispatch_once(&onceToken, ^{

            NSLog(@"---allocWithZone--xxxx----");

             _instance = [super allocWithZone:zone];

        });

        

        return _instance;

    }

    - (id)copyWithZone:(NSZone *)zone{

        return _instance;

    }

    /**

        以下是非ARC需要考虑的问题

     **/

    //- (oneway void)release{

    //    

    //}

    //

    //- (instancetype)retain{

    //    return _instance;

    //}

    //

    //- (instancetype)autorelease{

    //    return _instance;

    //}

    //

    //- (NSUInteger)retainCount{

    //    return 1;

    //}

    @end

  • 相关阅读:
    PAT1038
    PAT1034
    PAT1033
    PAT1021
    PAT1030
    PAT1026
    PAT1063
    PAT1064
    PAT1053
    PAT1025
  • 原文地址:https://www.cnblogs.com/David-SU/p/5264145.html
Copyright © 2011-2022 走看看