Objective-C創建完整單例

單例模式簡介

單例模式的百度百科

單例模式是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個實例
單例模式的實現
第一步:聲明
#import <Foundation/Foundation.h>

@interface ShareManager : NSObject

+ (instancetype)shareManager;

@end

第二步:實現步驟
#import "ShareManager.h"

@implementation ShareManager


static ShareManager *manager = nil;

/*
 創建單利,單利的唯一性
 */
+ (instancetype)shareManager{

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [[ShareManager alloc]init];
    });
    return manager;
}


/*
 覆蓋該方法主要確保 alloc init方法創建對象的唯一性
 */
+ (instancetype)allocWithZone:(struct _NSZone *)zone{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [super allocWithZone:zone];
    });
    return manager;
}

/*
 確保通過copy產生對象的唯一性
 */
- (id)copy{
    return self;
}

/*
 確保通過mutableCopy產生對象的唯一性
 */
- (id)mutableCopy{
    return self;
}
@end

部分說明
1.由單例的唯一性可以知道,我們在使用單例模式時,一定要確保該單例類在全局只有一個實例化對象;
2.之所以會覆蓋:+ (instancetype)allocWithZone:(struct_NSZone*)zone方法,是為了確保通過[[ShareManager alloc] init]方法來初始化對象時對象的唯一性,其中alloc會調用該方法,只是zone參數默認為nil;因為當前類覆蓋了allocWithZone方法,所以只能通過它的父類來分配內存,即通過[super allocWithZone:zone]方式;
3.覆蓋copy和mutableCopy方法,是為了確保通過copy和mutableCopy產生對象時對象的唯一性;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容