您好,登錄后才能下訂單哦!
1.基本概念
單例模式是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例類的特殊類。通過單例模式可以保證系統中一個類只有一個實例而且該實例易于外界訪問。
注意:蘋果大量使用了此模式。例如:[NSUserDefaults standardUserDefaults], [UIApplication sharedApplication], [UIScreen mainScreen], [NSFileManager defaultManager],所有的這些方法都返回一個單例對象。
2.單例設計模式的適用情況
如果說創建一個對象會耗費很多系統資源,那么此時采用單例模式,因為只需要一個實例,會節省alloc的時間。
在IOS開發中,如果很多模塊都要使用同一個變量,此時如果把該變量放入單例類,則所有訪問該變量的調用變得很容易,否則,只能通過一個模塊傳遞給另外一個模塊,這樣增加了風險和復雜度
3.單例實例
新建一個接口類Singleton繼承于NSObject:
@interface Singleton : NSObject
+ (Singleton *) sharedInstance;
@end
在實現類中:
@implementation Singleton
//1.
static Singleton * sharedSingleton = nil;
+ (Singleton *) sharedInstance
{
//2.
if (sharedSingleton == nil) {
sharedSingleton = [[Singleton alloc] init];
}
return sharedSingleton;
}
@end
1.聲明一個靜態變量去保存類的實例,確保它在類中的全局可用性。
2.此方法只會執行一次,執行過后在整個生命周期不再執行,確保只有一個實例。
這種不能排除多線程的時候,同時調用出現的問題,所以為了安全起見我們可以進行改進。有2種思路來解決這一問題。
(1)使用關鍵字@synchronized進行加鎖
@implementation Singleton
static Singleton * sharedSingleton = nil;
+ (Singleton *) sharedInstance
{
@synchronized(self)if{
if (sharedSingleton == nil) {
sharedSingleton = [[Singleton alloc] init];
}
return sharedSingleton;
}
}
@end
(2)使用Dispatch_once,在整個生命周期中,只會調用一次
@implementation Singleton
static Singleton * sharedSingleton = nil;
+ (Singleton *) sharedInstance
{
static dispatch_once_t once;
dispatch_once(&once,^{
sharedSingleton = [[Singleton alloc] init];
});
return sharedSingleton;
}
@end
這樣在常用情況下都可以使用了。但這并不是一個“嚴格”的版本。具體情況參考這篇博文
http://blog.csdn.net/abel_tu/article/details/12836961
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。