[iOS开发]单例模式

39 篇文章 0 订阅

什么是单例模式:

面向对象应用程序中的单例类(singleton class)总是返回自己的同一个实例。它提供了对类的对象所提供的资源的全局访问点。与这类设计相关的设计模式称为单例模式。
单例设计模式确切的说就是一个类只有一个实例,有一个全局的接口来访问这个实例。当第一次载入的时候,它通常使用延时加载的方法创建单一实例。单例类,在整个项目中只有一个实例,并提供一个类方法供全局调用,在编译时初始化这个类,然后一直保存在内存中,到程序退出时由系统自动释放这部分内存。

何时使用单例模式:

  • 类只能有一个实例,并且必须从一个为人熟知的访问点对其进行访问。
  • 这个唯一的实例只能通过子类化进行扩展,而且扩展的对象不会破坏客户端代码。

静态全局变量保持着对类的实例的唯一引用,类方法提供了共享的服务,不用创建其对象就可以访问。

实现:

下面重写MVC练习的demo,让它实现单例:

//  MyModel.h
//  MVCStudying

#import <Foundation/Foundation.h>

@interface MyModel : NSObject

@property (nonatomic, strong) NSMutableArray *nameStringArray;
@property (nonatomic, strong) NSMutableArray *keyStringArray;

- (void)myModelInit;
- (void)myModelAddName:(NSString *)addName andKey:(NSString *)addkey;

+ (instancetype)getModel;//获取单例

@end
//  MyModel.m
//  MVCStudying

#import "MyModel.h"

@implementation MyModel

static MyModel *_instance = nil;

+ (void)load {
    _instance = [[self alloc] init];
    [_instance myModelInit];
}

+ (instancetype)getModel {
    return _instance;
}

+ (instancetype)alloc {
    if (_instance) {
        //不允许重复创建
        //创建一个异常
        NSException *excp = [NSException exceptionWithName:@"Error" reason:@"Error" userInfo:nil];
        //抛出异常
        [excp raise];
    }
    return [super alloc];
}

- (void)myModelInit {
    _nameStringArray = [[NSMutableArray alloc] init];
    
    _keyStringArray = [[NSMutableArray alloc] init];
    
    [_nameStringArray addObject:@"nameFirst"];
    [_keyStringArray addObject:@"keyFirst"];
}

- (void)myModelAddName:(NSString *)addName andKey:(NSString *)addkey {
    [_keyStringArray addObject:addkey];
    [_nameStringArray addObject:addName];
}
@end

在后续的使用中,就可以使用getModel方法获取单例:

//    _myModel = [[MyModel alloc] init];
//    [_myModel myModelInit];
    _myModel = [MyModel getModel];

注意:

单例模式还要考虑线程安全问题,本人学习能力有限,之后再对线程方面做学习。
Demo地址:https://github.com/BillyMiracle/MVCDemo.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值