特点:
1.内存中只有唯一一个副本
2.提供一个全局的访问点->类方法能够方便访问
目前学过的单列:
- UIApplication
- NSFileManager
- NSUseDefaults
- NSNotifcationCenter;
在iOS 开发中,开发的使用非常频繁,公司面试要求手写单列
#import <Foundation/Foundation.h>
@interface diotm : NSObject
//全局访问点
@interface diotm : NSObject
//全局访问点
+ (instancetype)sharDitem;
/**
* 面试中手写单列,写以下代码即可
关于 allocWithZone 能够保证无论怎么实例化对象,内存中都只有唯一的一个副本
但是在很多时候,会希望,通过全局访问入口,获得一个单列对象,同时又可以自己实例化新的副本
*/
@implementation diotm
+ (instancetype)sharDitem{
//定义一个静态变量来记录对象
static id insd;
//同步
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
insd = [[self alloc]init];
});
return insd;
* 面试中手写单列,写以下代码即可
关于 allocWithZone 能够保证无论怎么实例化对象,内存中都只有唯一的一个副本
但是在很多时候,会希望,通过全局访问入口,获得一个单列对象,同时又可以自己实例化新的副本
*/
@implementation diotm
+ (instancetype)sharDitem{
//定义一个静态变量来记录对象
static id insd;
//同步
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
insd = [[self alloc]init];
});
return insd;
}
内存地址一样
八,演示又可以单列,又可以实例化
十.互斥锁也可以进行单列
+ (instancetype)sysnhu{
static id insd;
@synchronized(self) {
if (insd == nil) {
insd = [[self alloc]init];
}
}
return insd;
static id insd;
@synchronized(self) {
if (insd == nil) {
insd = [[self alloc]init];
}
}
return insd;
}
十一,互斥锁和单列进行比较