單例的實現方式

2021-09-25 12:03:39 字數 1969 閱讀 5469

#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...