#import "mygizmoclass.h"
static mygizmoclass *sharedgizmomanager = nil;
@implementation mygizmoclass
+ (mygizmoclass *)sharedmanager else
return sharedgizmomanager;
}+ (instancetype)allocwithzone:(struct _nszone *)zone
- (id)copywithzone:(nszone *)zone
@end
在蘋果官方的寫法中,並不能保證多執行緒中的執行緒安全,我們用幾個執行緒來呼叫sharedmanager,會發現多次呼叫
- (void)test1 );
dispatch_async(queue2, ^);
}- (void)saleticketnotsafe
我們可以看到列印了兩次~~~~~~
二、為了保證執行緒安全,可以使用@synchronized
#import "synchronizedsingleclass.h"
@implementation synchronizedsingleclass
+ (synchronizedsingleclass *)sharedmanager else
}return sharedsynchronizedsinglemanager;
}+ (instancetype)allocwithzone:(struct _nszone *)zone
- (id)copywithzone:(nszone *)zone
@end
/*
* 此處重寫+allocwithzone:方法,再加上@synchronized 來保證執行緒安全
*/- (void)test2 );
dispatch_async(queue2, ^);
}- (void)synchronizedtest
三、此處不用重寫+allocwithzone:方法,而是直接用@synchronized 來保證執行緒安全
#import "synchronizeddemoclass.h"
@implementation synchronizeddemoclass
/* * //此處不用重寫+allocwithzone:方法,而是直接用@synchronized 來保證執行緒安全
*/+ (instancetype)sharedsingleton else
}return instance;
}@end
/*
* 此處不用重寫+allocwithzone:方法,而是直接用@synchronized 來保證執行緒安全
*/- (void)test3 );
dispatch_async(queue2, ^);
}- (void)synchronsizeddemotest
四、dispatch_once來實現單例
#import "dispatchonceclass.h"
@implementation dispatchonceclass
+ (instancetype)sharedsingleton );
return instance;
}@end
- (void)test4 );
dispatch_async(queue2, ^);
}- (void)dispatchoncedemo
實現單例的幾種方式
面試 你懂什麼是分布式系統嗎?redis分布式鎖都不會?餓漢式單例 在使用該類的靜態成員時,無論有沒有使用單例類,都會建立單例物件 餓漢式單例 在使用該類的靜態成員時,無論有沒有使用單例類,都會建立單例物件 author wangpeng public class singleton public ...
C Singleton單例實現方式
1.singleton模式的意圖是什麼?或者說使用singleton模式解決的問題是什麼?答 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點,該例項被所有程式模組共享!2.解決上述問題的方法 方法一 全域性變數或是靜態變數 此方法存在的問題 這樣做雖然能保證方便的訪問例項,但是不能保證只宣告...
2 1 單例實現方式
執行緒安全,呼叫效率高,但是不能延時載入 public class singleton1 public static singleton1 getinstance 執行緒不安全,會產生多個例項 public class singleton2 public static singleton2 geti...