单例

什么时候需要使用单例?

整个应用程序共用一份资源,只需要创建一次。
例如:
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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。