dispatch_once函数能保证某段代码在程序中只被执行一次,即使在多线程环境下,也可以保证线程安全。
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
//只执行1次的代码
});
把这个方法单独抽出成一个宏方法:
#define DEFINE_SHARED_INSTANCE_USING_BLOCK(block) \
static dispatch_once_t pred = 0; \
static id _sharedObject = nil; \
dispatch_once(&pred, ^{ \
_sharedObject = block(); \
}); \
return _sharedObject; \
常见用法:封装单例类
#import <Foundation/Foundation.h>
#define APPGLOBARMANAGER [AppGlobarManager sharedInstance] //获取单例类对象
@interface AppGlobarManager : NSObject
+ (AppGlobarManager *)sharedInstance;//全局管理对象
@property (nonatomic, strong) NSString *userName;//
@end
@implementation AppGlobarManager
+ (AppGlobarManager *)sharedInstance{
DEFINE_SHARED_INSTANCE_USING_BLOCK(^{
return [[self alloc] init];
});
}
@end
在需要访问其 userName属性时:
NSString *username = APPGLOBARMANAGER.userName;
如果本文对你有帮助记得点个喜欢哈
网友评论