單例(singleTon)
單例
單例模式的意圖就是使得類中的一個物件成為系統中的唯一例項。它提供了對類的物件所提供的資源的全域性訪問點。因此需要用一種只允許生成物件類的唯一例項的機制。下面讓我們來看下單例的作用:
可以保證的程式執行過程,一個類只有一個示例,而且該例項易於供外界訪問,從而方便地控制了例項個數,並節約系統資源。
- 單例模式的使用場合
類只能有一個例項,並且必須從一個為人數值的訪問點對其訪問。
這個唯一的例項只能通過子類化進行擴充,並且擴充的物件不會破壞客戶端程式碼。
單例的實現
SingleTonTest.h中
#import <Foundation/Foundation.h>
@interface SingleTonTest : NSObject
//單例中的屬性
@property(nonatomic,copy)NSString *sendStr;
@property (strong, nonatomic) NSMutableArray *arrayM;
+(SingleTonTest *)sharedSingleTon;
@end
SingleTonTest.m中
#import "SingleTonTest.h"
static SingleTonTest *singleTon = nil;
@implementation SingleTonTest
//經典方式
//+(SingleTonTest *)currentUser
//{
// if(singleTon == nil){
//
// singleTon = [[self.class alloc]init];
//
// }
// return singleTon;
//}
//GCD方式(建議使用)
+(SingleTonTest *)sharedSingleTon{
static dispatch_once_t onceTocken;
dispatch_once(&onceTocken,^{
if (!singleTon) {
singleTon = [[SingleTonTest alloc]init];
}
});
return singleTon;
}
//重寫allocWithZone方法,用來保證其他人直接使用alloc和init試圖獲得一個新例項的時候不產生一個新例項,
+(id)allocWithZone:(NSZone *)zone{
@synchronized(self){
if (!singleTon) {
singleTon = [super allocWithZone:zone]; //確保使用同一塊記憶體地址
return singleTon;
}
return nil;
}
}
//自定義初始化方法
- (instancetype)init
{
self = [super init];
if(self){
self.sendStr = @"Singleton";
self.arrayM = [[NSMutableArray alloc] init];
}
return self;
}
//重寫該方法主要確保當使用者通過copy方法產生物件時物件的唯一性
- (id)copy
{
return self;
}
//重寫該方法主要確保當使用者通過mutableCopy方法產生物件時物件的唯一性
- (id)mutableCopy
{
return self;
}
@end
相關文章
- 單例模式 singleton單例模式
- 單例模式--SingleTon單例模式
- 單例模式(Singleton)單例模式
- 單例模式(Singleton Pattern)單例模式
- Singleton 單例設計模式單例設計模式
- Singleton——單例模式(8種)單例模式
- laravel singleton 單例模式使用Laravel單例模式
- [DELPHI]單例模式(singleton) 陳省單例模式
- 設計模式—singleton(單例模式)設計模式單例
- 設計模式--單例(Singleton Pattern)設計模式單例
- Singleton(單例)——物件建立型模式單例物件模式
- 設計模式 - 單例模式(Singleton)設計模式單例
- java設計模式-單例模式SingletonJava設計模式單例
- 設計模式之單例模式 - Singleton設計模式單例
- 設計模式——3單例模式(Singleton)設計模式單例
- 深入理解 JavaScript 單例模式 (Singleton Pattern)JavaScript單例模式
- PHP設計模式(四)單例模式(Singleton)PHP設計模式單例
- 設計模式之單例模式(Singleton Pattern)設計模式單例
- Java設計模式——單例模式(Singleton pattern)Java設計模式單例
- 《設計模式》 - 1. 單例模式( Singleton )設計模式單例
- Java設計模式之單例模式(Singleton)Java設計模式單例
- 常用設計模式-單例模式(Singleton pattern)設計模式單例
- Scala 與設計模式(一):Singleton 單例模式設計模式單例
- PHP設計模式(一)—單例模式(Singleton Pattern)PHP設計模式單例
- python3中的單例模式SingletonPython單例模式
- Java設計模式之單例模式(Singleton Pattern)Java設計模式單例
- JAVA設計模式之 單例模式【Singleton Pattern】Java設計模式單例
- Python單例模式(Singleton)的N種實現Python單例模式
- 設計模式的征途—1.單例(Singleton)模式設計模式單例
- 理解C#中靜態Static與單例SingletonC#單例
- Java singleton 一例Java
- JAVA中實現單例(Singleton)模式的八種方式Java單例模式
- 設計模式 - 單例模式Singleton的8種寫法設計模式單例
- C++用多種方式實現Singleton單例模式C++單例模式
- OOAD之單例模式Singleton的6種寫法單例模式
- 設計模式之“物件效能模式”: Singleton 單例模式(筆記)設計模式物件單例筆記
- 2.C#設計模式系列01_單例模式_SingletonC#設計模式單例
- Spring IoC 中的(Singleton)單例物件建立過程探索Spring單例物件