单例模式

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

这里是在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

 

posted @ 2016-03-11 01:23  独孤求傲  阅读(161)  评论(0编辑  收藏  举报