什么时候需要使用单例?
整个应用程序共用一份资源,只需要创建一次。
例如:
1.登录后用户的个人信息使用nsuserdefaults单例管理
2.使用单例访问应用的配置信息
3.。。。
单例的优缺点
优点:保证这个类在程序运行过程中只有一个实例,而且便于外界访问。
缺点:单例实例一旦创建,对象指针是保存在静态区的,那么在堆区分配空间只有在应用程序终止后才会被释放。而且单例不能继承。
1.最优写法使用GCD
优点是dixpatch_once保证了线程安全
.h
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface SingManager : NSObject
//禁止外部调用
-(instancetype)init NS_UNAVAILABLE;
-(id)copy NS_UNAVAILABLE;
-(id)mutableCopy NS_UNAVAILABLE;
+(instancetype)new NS_UNAVAILABLE;
+(instancetype)sharedSingManager;
@end
NS_ASSUME_NONNULL_END
.m
#import "SingManager.h"
@implementation SingManager
//单例的创建
+ (instancetype)sharedSingManager{
static SingManager *sharedSingManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedSingManager = [[self alloc] init];
});
return sharedSingManager;
}
@end
2.不考虑线程安全
#import "SingManager.h"
static SingManager *sharedSingManager = nil;
@implementation SingManager
//单例的创建
+ (instancetype)sharedSingManager{
if(!sharedSingManager){
sharedSingManager = [[self alloc] init];
}
return sharedSingManager;
}
@end