單例模式
1:什么是單例模式
單例模式是一種常見的設計模式,對于單例對象的類,必須要保證在任意時刻下只有一個對象存在,而且自行實例化該對象,并向整個系統提供這個對象。也就是說對于一個單例類無論實例化對象多少次都只有一個實例對象存在,并且這個對象是全局的,能夠被整個系統訪問到。
單例對象和c中的全局變量很相似。c中的全局變量可以實現在不同函數之間的數據共享,單例對象可以實現在不同對象之間的數據共享
2:單例對象的創建方式
一般類方式,并且shared/default/current開頭
3:單例模式的應用
1.在不同對象之間數據共享
2.當創建一個類的時候需要耗費很大的性能時,這時候可以把這個類設計成單例類
這樣有什么優點呢?
1.在內存中只有一個對象,節省內存空間。
2.避免頻繁的創建銷毀對象,可以提高性能。
3.避免對共享資源的多重占用。
4.可以全局訪問。
4.單例的創建方法
1.第一種,在創建一個對象時先判斷在程序中有沒有創建過這個對象。
.h中
#import <Foundation/Foundation.h>
@interface SingleClass : NSObject
+(instancetype)sharedUtils;
@property (nonatomic,copy) NSString *name;
@end
.m中
#import "SingleClass.h"
@implementation SingleClass
static SingleClass *DefaultManager = nil;
+(instancetype)sharedUtils
{
if (!DefaultManager)
DefaultManager = [[self allocWithZone:NULL] init];
return DefaultManager;
}
2.直接利用系統提供的多線程技術dispatch_once
.h中
#import <Foundation/Foundation.h>
@interface SingleClass : NSObject
+ (SingleClass *)sharedSingleClass;//創建單例對象的方法
@property (nonatomic,copy) NSString *name;
@end
.m中
#import "SingleClass.h"
@implementation SingleClass
//1:創建一個靜態的全局單例對象并且初始化為nil
static SingleClass *single = nil;
+ (SingleClass *)sharedSingleClass{
//2:調用GCD的once方法
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{//block//保證{}里面的代碼在整個程序運行期間只被執行一次
//3:對象單例對象進行實例化
single = [[SingleClass alloc] init];
});
return single;//第一次調用該方法的時候返回實例化后的對象//從第二次開始返回的都是第一次實例化的對象
}
5.調用方法
如果需要在哪里賦值的話,可以引入頭文件并進行初始化。
SingleClass *singleClass = [SingleClass sharedUtils];
singleClass.name = @"哈哈";
調用
SingleClass *singleClass = [SingleClass sharedUtils];
NSLog(@"打印單例數值---%@",singleClass.name);
結果打印:
打印的結果.png