[iOS开发]单例模式

Posted Billy Miracle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[iOS开发]单例模式相关的知识,希望对你有一定的参考价值。

什么是单例模式:

面向对象应用程序中的单例类(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

以上是关于[iOS开发]单例模式的主要内容,如果未能解决你的问题,请参考以下文章

IOS开发基础Object-C(12)—单例模式

iOS 开发之单例模式

[iOS开发]单例模式

iOS开发设计模式之单例设计模式

iOS 委托和单例模式

iOS开发-OC篇-单例模式