iOS开发中之单例设计模式

2020-04-28  本文已影响0人  DB001

1、单例设计模式

基本概念:
1.所谓单例就是确保在程序运行过程中只创建一个对象实例。

使用单例模式的作用:
1.它可以保证某个类在程序运行过程中最多只有一个实例,也就是对象实例只占用一份内存资源。

单例模式的三个要点:

  1. 该类有且只有一个实例;
  2. 该类必须能够自行创建这个实例;
  3. 该类必须能够自行向整个系统提供这个实例。

单例模式优缺点:
优点:
1、提供了对唯一实例的受控访问。
2、由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。
3.因为单例模式的类控制了实例化的过程,所以类可以更加灵活修改实例化过程。
缺点:
1、由于单利模式中没有抽象层,因此单例类的扩展有很大的困难。
2、单例类的职责过重,在一定程度上违背了“单一职责原则”。

#import "ViewController.h"
#import "KXXTool.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    //创建对象
    KXXTool *t1 = [[KXXTool alloc]init];
    
    KXXTool *t2 = [[KXXTool alloc]init];
    KXXTool *t3 = [KXXTool new];

    NSLog(@"\n%@\n%@\n%@\n%@\n%@",t1,t2,t3,[KXXTool shareTool],[t1 copy]);
    
}
@end

***************************************************************

#import <Foundation/Foundation.h>

@interface KXXTool : NSObject<NSCopying,NSMutableCopying>

//提供类方法,方便外界访问
/*
 规范:share + 类名 |share |default + 类名|manager
 */

+(instancetype)shareTool;
@end


#import "KXXTool.h"

@implementation KXXTool

//01 提供一个全局的静态变量(对外界隐藏)
static KXXTool *_instance;

//02 重写alloc方法,保证永远只分配一次存储空间
// alloc - > allocWithZone(分配存储空间)

+(instancetype)allocWithZone:(struct _NSZone *)zone
{
 
    //只执行一次+线程安全
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [super allocWithZone:zone];
    });
    
    return _instance;
}

//03 提供类方法
+(instancetype)shareTool
{
    return [[self alloc]init];
}

//04 重写copy
-(id)copyWithZone:(NSZone *)zone
{
    return _instance;
}

-(id)mutableCopyWithZone:(NSZone *)zone
{
    return _instance;
}
@end

上一篇 下一篇

猜你喜欢

热点阅读