單例類
#import <Foundation/Foundation.h>
@interface Single : NSObject
@property (nonatomic,copy)NSString *value;
+(Single *)SingleModel;
@end
#import "Single.h"
@implementation Single
static Single *single =nil;
+ (Single *)SingleModel
{
//block內程式碼只會被執行一次 是否被執行 是由once來記錄
static dispatch_once_t once;
dispatch_once(&once, ^{
single =[[Single alloc] init];
});
return single;
}
+ (id)allocWithZone:(struct _NSZone *)zone
{
static dispatch_once_t once;
dispatch_once(&once, ^{
single =[super allocWithZone:NULL];
});
return single;
}
另外 兩種加鎖方式
@implementation Single
static Single * single =nil;
+ (Single *)SingleModel
{
//@synchronized 資源保護鎖 防止多執行緒操作時 對同一資源訪問時造成資源混亂而設定的
//()標示符 代表類 或者使用物件型別 一般使用self
@synchronized (self)
{
if (single==nil)
{
single =[[Single alloc] init];
}
}
return single;
}
+ (id)allocWithZone:(struct _NSZone *)zone
{
//NSLock 一種加鎖的形式 和 @synchronized (self)效果一樣
if (single ==nil)
{
NSLock *lock =[[NSLock alloc] init];
//[lock lock]和[lock unlock]之間的程式碼就是要保護的資源
[lock lock];
single = [super allocWithZone:NULL];
[lock unlock];
}
return single;
}
相關文章
- java單例類Java單例
- 設計模式——懶漢式單例類PK餓漢式單例類設計模式單例
- 單例類的總結單例
- 內部類單例模式,單例模式
- 類别範本 單例模板單例
- JS中的單例模式及單例模式原型類的實現JS單例模式原型
- c++類的簡單例項C++單例
- Python的類及單例實現Python單例
- python面試題~反射,元類,單例Python面試題反射單例
- C++ 單例類别範本(詳解)C++單例
- 一個完整的類用來生成RSACryptoServiceProvider單例類(.NET)IDE單例
- 隱藏在 SDK 中的單例類别範本單例
- 到底是用"靜態類"還是單例單例
- 抽象外觀類的單例化分析與改造抽象單例
- PHP封裝的一個單例模式Mysql操作類PHP封裝單例模式MySql
- VC++ 2017的一個單例模板類C++單例
- 單例與單例項之爭單例
- 《劍指offer》:[48]不能被繼承的類-單例模式繼承單例模式
- 單例單例
- 您的單例模式,真的單例嗎?單例模式
- 不是單例的單例——巧用ClassLoader單例
- 類和例項
- 單例模式 – 單例登錄檔與 Spring 實現單例剖析單例模式Spring
- 單例模式 - 單例登錄檔與 Spring 實現單例剖析單例模式Spring
- java和C++之單例類雙重檢查加鎖JavaC++單例
- 多執行緒併發鎖分類以及簡單例項執行緒單例
- 單例之罪單例
- 單例模式單例模式
- 直播平臺開發,直播各個分類單例設計展示單例
- 設計模式-單例模式的Java程式碼體現Runtime類設計模式單例Java
- 單例模式,真不簡單單例模式
- 花式寫單例之單例的六種寫法單例
- 單例模式解析單例模式
- iOS單例物件iOS單例物件
- 單例模式(3)單例模式
- redis單例部署Redis單例
- php單例模式PHP單例模式
- 單例(singleTon)單例