一、什麼是單例:
單例:在記憶體中只有唯一的例項,並且提供乙個全域性的訪問方法!
單例的好處:可以實現同乙份資源共享。
二、單例設計:非全部封死,提供兩個建立物件的方式
(1)可以選擇使用類方法,直接建立乙個單例物件
(2)也可以選擇使用其他方式,如alloc、init方式,建立非單例物件
在單例類的.m檔案中:
+(instancetype)sharemanager
); return instance;
}
三、單例設計:全部封死,不論怎麼建立,產生的都是單例物件
1、在arc環境下,單例類.m檔案:
static id _instance;
@implementation hmaccount
//提供乙個類方法,快速建立單例物件
+(instancetype)shareaccount
); return _instance;
}-(instancetype)init
); }
return self;
}+(instancetype)allocwithzone:(struct _nszone *)zone
); return _instance;
}
2、在mrc(非arc)環境下,單例類.m檔案:
static id _instance;
@implementation hmaccount
/** * 實現自定義方法,內部建立物件
*/+ (instancetype)shareaccount
); return _instance;
}/**
* 重寫init方法,保證初始化資源操作只做一次
*/-(instancetype)init
); }
return self;
}/**
* 重寫alloc方法,保證物件只建立乙個,位址唯一
*/+ (instancetype)allocwithzone:(struct _nszone *)zone
); return _instance;
}/**
* 重寫copy方法,內部建立物件
*/+ (id)copywithzone:(struct _nszone *)zone
/** * 重寫release方法,不允許釋放物件
*/-(oneway void)release
/** * 重寫release方法,不允許釋放物件
*/-(instancetype)autorelease
/** * 重寫retain方法,不允許物件計數器+1
*/-(instancetype)retain
/** * 重寫retain方法,不允許物件計數器+1
*/-(nsuinteger)retaincount
四、高效程式設計
—- 使用巨集封裝單例模型(以arc下,全部封死的情況為例)
(1)新建乙個.h檔案,定義單例巨集
#define singleton_h(name) +(instancetype)share##name;
#define singleton_m(name)\
static id _instance;\
+(instancetype)share##name\
);\ return _instance;\
}\+(instancetype)allocwithzone:(struct _nszone *)zone\
);\ return _instance;\
}
(2)使用
在需要設計成單例的類中:(account類) —
》 .h檔案中:singleton_h(account) —
》 .m檔案中:singleton_m(account)
五、總結
1、在實際開發中根據實際需求選擇是否需要全部封死
2、個人建議:使用第一種方法,不要全部封死,提供乙個快速建立單例物件的方法就好了。
這樣設計也是仿照蘋果單例的設計模式,例如:
alloc]init];
蘋果設計的單例也是支援兩種方式建立物件的。
IOS開發 單例模式安全寫法
一般情況我們都是這麼寫 static mysingleton sharesingleton instancetype sharedsingleton static dispatch once oncetoken dispatch once oncetoken,sharesingleton mysin...
iOS開發單例模式的簡單實用
單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。目前具有執行緒安全的兩種單例寫法 第一種 i...
IOS開發之 單例設計模式
一.對單例設計模式的分析 1.單例設計模式 singleton 1 單例是什麼 它可以保證某個類建立出來的物件永遠只有乙個 2 有什麼作用 節省記憶體開銷 如果有一些資料,整個程式中都用得上,只需要使用同乙份資源即可 保證大家訪問的資料是相同的,一致的 一般來說,工具類設計成單例模式是比較合適的 3...