iOS-创建单例模式

来源:互联网 发布:进销存数据库表设计 编辑:程序博客网 时间:2024/05/23 22:15

iOS中创建单例模式
方法一:

#pragma mark - 设计单例模式static id _instance;//重写allocWithZone:方法+(instancetype)allocWithZone:(struct _NSZone *)zone{    @synchronized (self) {        if (_instance == nil) {            _instance = [super allocWithZone:zone];        }    }    return _instance;}//提供类方法让外界访问唯一的实例+(instancetype)shareInstance{    @synchronized (self) {        if (_instance == nil) {            _instance = [[self alloc] init];        }    }    return _instance;}//实现copyWithZone方法-(id)copyWithZone:(struct _NSZone *)zone{    return _instance;}

方法二:

+(instancetype)sharedInstance {    static WMSingleton *singleton = nil;    if (! singleton) {        singleton = [[self alloc] initPrivate];    }    return singleton;}- (instancetype)init {    @throw [NSException exceptionWithName:@"这个是个单例"                                   reason:@"应该这样调用 [WMSingleton sharedInstance]"                                 userInfo:nil];    return nil;}//实现自己真正的私有初始化方法- (instancetype)initPrivate {    self  = [super init];    return self;}

方法三:

static WMObject *_instance;+ (instancetype)allocWithZone:(struct _NSZone *)zone{    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        _instance = [super allocWithZone:zone];    });    return _instance;}+ (instancetype)sharedInstance{    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        _instance = [[self alloc] init];    });    return _instance;}- (id)copyWithZone:(NSZone *)zone{    return _instance;}

方法四:

创建一个WMSingleton.h// .h文件#define WMSingletonH(name) + (instancetype)shared##name;// .m文件#define WMSingletonM(name) \static id _instance; \ \+ (instancetype)allocWithZone:(struct _NSZone *)zone \{ \    static dispatch_once_t onceToken; \    dispatch_once(&onceToken, ^{ \        _instance = [super allocWithZone:zone]; \    }); \    return _instance; \} \ \+ (instancetype)shared##name \{ \    static dispatch_once_t onceToken; \    dispatch_once(&onceToken, ^{ \        _instance = [[self alloc] init]; \    }); \    return _instance; \} \ \- (id)copyWithZone:(NSZone *)zone \{ \    return _instance; \}使用方法//.h类//引入这个宏文件#import "WMSingleton.h"@interface WMObject : NSObjectWMSingletonH(object)@end//.m类@implementation WMObjectWMSingletonM(Car)@end
0 0
原创粉丝点击