單例在Objective-C和Swift中的實現

Objective-C

@implementation MySingleInstance
static MySingleInstance * mysingle = nil;
+ (instancetype)shareInstance {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        mysingle = [[super allocWithZone:NULL] init];
    });
    return mysingle;
}
//alloc的時候會調用這個方法,重寫使其直接調用上面的方法
+ (instancetype)allocWithZone:(struct _NSZone *)zone {
    return [MySingleInstance shareInstance];
}
//copy的時候會調用
- (instancetype)copyWithZone:(struct _NSZone *)zone {
    return [MySingleInstance shareInstance];
}
@end

Swift

class SwiftSingle: NSObject {
    var name = ""
    static let shared = SwiftSingle()
    private override init() {}  //重載初始化方法可以避免外部對象使用init方法創建另外一個實例
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容