单例模式实现代码
#import <Foundation/Foundation.h>
@interface Singleton : NSObject
+ (instancetype)sharedInstance;
@end
@implementation Singleton
static Singleton *sharedSingleton = nil;
+ (instancetype)sharedInstance {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedSingleton = [[self alloc] init];
});
return sharedSingleton;
}
// 防止通过alloc和new创建新实例
- (instancetype)allocWithZone:(NSZone *)zone {
return [self sharedInstance];
}
// 防止通过copy创建新实例
- (id)copyWithZone:(NSZone *)zone {
return self;
}
// 防止通过mutableCopy创建新实例
- (id)mutableCopyWithZone:(NSZone *)zone {
return self;
}
@end
优点
- 全局唯一实例:确保在整个应用程序中只有一个实例存在,方便管理共享资源,如数据库连接、文件管理器等。
- 节省资源:避免频繁创建和销毁实例,减少内存开销,提高性能。
- 易于访问:通过类方法
sharedInstance
可以方便地获取实例,在整个应用程序中任何地方都能轻松访问。
缺点
- 全局状态:单例模式可能导致全局状态的存在,使得代码的可测试性变差,因为不同的测试可能会相互影响。
- 内存管理:单例对象在应用程序生命周期内一直存在,如果单例对象持有大量资源,可能会导致内存占用过高。
- 并发问题:在多线程环境下,如果实现不当,可能会出现线程安全问题,虽然通过
dispatch_once
可以解决此问题,但如果使用其他实现方式则需要额外注意。