1、Singleton 單例模式是一種常見的軟體設計模式。這種模式的特點就是應用了 Singleton 單例模式的類必須保證始終只有一個執行個體(對象)存在(許多時候系統中需要某個類只能同時存在一個對象,而且可以全域調用)。
2、單例模式的思路是:
一個類能返回一個執行個體(永遠是同一個)和一個獲得該執行個體的方法(必須是靜態方法);當我們調用這個方法時,如果類持有的執行個體不為空白,就返回這個執行個體;如果類保持的執行個體為空白,就建立該類的執行個體,並將執行個體賦予該類保持的執行個體,從而限制使用者使其只有通過該類提供的靜態方法來得到該類唯一的執行個體。
3、單例模式在多線程場合下必須小心使用。當唯一的執行個體未建立時,如果有兩個線程同時調用建立方法,那麼他們同時沒有檢測到唯一的執行個體存在,從而同時各自建立了一個執行個體,這樣就有兩個執行個體被建立出來,從而違反了單例模式中執行個體唯一的原則。解決這個問題的辦法是為標記類是否已經執行個體化的變數提供一個互斥鎖(雖然這樣會降低效率)。
以上為轉載http://blog.csdn.net/iukey/article/details/7339844#的總結
特附上本人剛剛練習時候敲的代碼。
step1:建立new file MySingleton.h MySingleton.m
step2:在MySingleton.h中
#import<Foundation/Foundation.h>
@interface MySingleton :NSObject
{
int nResult;
}
+(MySingleton *)sharedSingleton; //類的靜態方法,只能使用類名調用
- (void)showResult;
- (void)outPut;
@end
step3:在MySingleton.m中
#import
"MySingleton.h"
static
MySingleton *_sharedSingleton =
nil;
@implementation MySingleton
+(MySingleton *)sharedSingleton
{
@synchronized([MySingleton
class])
//互斥鎖
{
if (_sharedSingleton ==
nil) {
_sharedSingleton = [[self
alloc] init];
}
return
_sharedSingleton;
}
return nil;
}
- (id)init
{
self = [super
init];
if (self !=
nil) {
nResult = 9;
}
return self;
}
- (void)showResult
{
NSLog(@"%d",nResult);
}
- (void)outPut
{
NSLog(@"%d",nResult);
}