iOS创建单例

2023-03-07  本文已影响0人  iOS小洁

OC单例

避免调用alloc创建新的对象

避免copy创建新的对象

+ (id)sharedInstance
{
    // 静态局部变量
    static Singleton *instance = nil;
    
    // 通过dispatch_once方式 确保instance在多线程环境下只被创建一次
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        // 创建实例
        instance = [[super allocWithZone:NULL] init];
    });
    return instance;
}

// 重写方法【必不可少】
+ (id)allocWithZone:(struct _NSZone *)zone{
    return [self sharedInstance];
}

// 重写方法【必不可少】
- (id)copyWithZone:(nullable NSZone *)zone{
    return self;
}

Swift 单例

public class FileManager { 
    public static let shared = FileManager() 
    private init() {    } 
}

public class FileManager {
    public static let shared = {
    // ....
    // ....
    return FileManager() 
  }() 
  private init() { }
}
上一篇下一篇

猜你喜欢

热点阅读