[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开发]单例模式的主要内容,如果未能解决你的问题,请参考以下文章