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
- iOS-创建单例模式
- ios GCD 创建单例模式
- iOS 创建单例
- iOS 单例创建
- iOS 创建单例
- iOS单例创建
- iOS 创建单例
- iOS 创建单例
- iOS 单例的两种创建模式
- ios 单例模式创建两种方法
- 创建模式->单例模式
- iOS单例模式
- iOS 单例模式
- IOS 单例模式
- iOS 单例模式
- IOS单例模式
- ios单例模式
- iOS 单例模式
- Android应用:StatusBar状态栏、NavigationBar虚拟按键栏、ActionBar标题栏、Window屏幕内容区域等的宽高
- 一步设置让TortoiseGit+msysgit记住帐号密码
- const 用法详解
- 怎么把pdf文件转换成word格式文档
- Ubuntu X11/Xlib.h 找不到
- iOS-创建单例模式
- Oracle 并行查询
- Codeforces Round #346 (Div. 2)--B. Qualifying Contest
- 对PipedOutputStream/PipedInputStream类的应用
- ZooKeeper原理及使用
- VS2010中char与宽字符的问题
- AutoLayout中的Content Hugging 和 Content Compression Resistance
- BZOJ 1996: [Hnoi2010]chorus 合唱队
- qrCode二维码的生成和识别