单例

来源:互联网 发布:java注解详解 编辑:程序博客网 时间:2024/04/29 22:35

//

//  singleton.h

//  singleton

//

//  Created by zmx on 16/2/20.

//  Copyright © 2016 zmx. All rights reserved.

//


#define singleton_h(name) + (instancetype)shared##name;


#if __has_feature(objc_arc)


#define singleton_m(name) static id _instance; \

\

+ (instancetype)shared##name { \

    static dispatch_once_t onceToken; \

    dispatch_once(&onceToken, ^{ \

        _instance = [[self alloc] init]; \

    }); \

    return _instance; \

} \

\

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

    static dispatch_once_t onceToken; \

    dispatch_once(&onceToken, ^{ \

        _instance = [super allocWithZone:zone]; \

    }); \

    return _instance; \

} \

\

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

    return _instance; \

}


#else


#define singleton_m(name) static id _instance; \

\

+ (instancetype)sharedAudioTool { \

    static dispatch_once_t onceToken; \

    dispatch_once(&onceToken, ^{ \

        _instance = [[self alloc] init]; \

    }); \

    return _instance; \

} \

\

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

    static dispatch_once_t onceToken; \

    dispatch_once(&onceToken, ^{ \

        _instance = [super allocWithZone:zone]; \

    }); \

    return _instance; \

} \

\

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

    return _instance; \

} \

\

- (instancetype)retain { \

    return _instance; \

} \

\

- (instancetype)autorelease { \

    return _instance; \

} \

\

- (oneway void)release { \

    \

} \

\

- (NSUInteger)retainCount { \

    return 1; \

}


#endif


//

//  AudioTool.h

//  singleton

//

//  Created by zmx on 16/2/20.

//  Copyright © 2016 zmx. All rights reserved.

//


#import <Foundation/Foundation.h>

#import "singleton.h"


@interface AudioTool :NSObject <NSCopying>


singleton_h(AudioTool)


@end


//

//  AudioTool.m

//  singleton

//

//  Created by zmx on 16/2/20.

//  Copyright © 2016 zmx. All rights reserved.

//


#import "AudioTool.h"


@implementation AudioTool


singleton_m(AudioTool)


@end



0 0
原创粉丝点击