IOS 单例设计模式解读

简介:

IOS 中单例设计模式的解读与用法

一、单例的作用

      顾名思义,单例,即是在整个项目中,这个类的对象只能被初始化一次。它的这种特性,可以广泛应用于某些需要全局共享的资源中,比如管理类,引擎类,也可以通过单例来实现传值。UIApplication、NSUserDefaults等都是IOS中的系统单例。

二、单例的写法

       单例的写法常用的有两种方式:

       方式1、不考虑线程

?
1
2
3
4
5
6
7
8
static  SingleCase *manager = nil;  
    
+ (SingleCase *)defaultManager {  
     if  (!manager){ 
         SingleCase = [[self alloc] init];  
         return  manager; 
         }
}

          方式2、考虑线程安全

?
1
2
3
4
5
6
7
8
9
+ (SingleCase *)sharedManager  
{  
         static  SingleCase *ManagerInstance = nil;  
         static  dispatch_once_t predicate;  
         dispatch_once(&predicate, ^{  
                 ManagerInstance = [[self alloc] init];   
         });  
     return  ManagerInstance;  
}

三、代码的优化

        通过上面的方法,我们已经可以使用类方法来得到这个单例,但很多时候,项目的工程量很大,还有可能会很多开发者同时参与一个项目的开发,为了安全与管理代码的方便,也为了给不是这个单例的创作者但会用到这个单例的开发人员一些提示,我们通常会重写一些方法:

首先我们自己实现一个alloc方法:

?
1
2
3
+(instancetype)myAlloc{
     return  [super allocWithZone:nil];
}

将我们的单例实现方法略作修改:

?
1
2
3
4
5
6
7
+(ZYHPayManager *)sharedMamager{
     static  ZYHPayManager * manager;
     if  (manager==nil) {
         manager=[[ZYHPayManager myAlloc]init];
     }
     return  manager;
}

将一些视图实例化对象的方法重写:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
+(instancetype)alloc{
     NSAssert(0, @ "这是一个单例对象,请使用+(ZYHPayManager *)sharedMamager方法" );
     return  nil;
}
+(instancetype)allocWithZone:( struct  _NSZone *)zone{
     return  [self alloc];
}
-(id)copy{
     NSLog(@ "这是一个单例对象,copy将不起任何作用" );
     return  self;
}
+(instancetype) new {
     return   [self alloc];
}

注意:这里的alloc使用了断言,让任何视图通过alloc创建对象的程序段断在此处,给程序员提示。copy方法这里只是简单的返回了原对象,并未做任何处理,打印信息给程序员提示。


目录
相关文章
|
设计模式
单例设计模式步骤
单例设计模式步骤
85 1
|
设计模式 消息中间件 安全
多线程编程设计模式(单例,阻塞队列,定时器,线程池)(二)
多线程编程设计模式(单例,阻塞队列,定时器,线程池)(二)
158 1
|
设计模式 安全 测试技术
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
299 0
|
设计模式 安全 Java
【设计模式】2、设计模式分类和单例设计模式
【设计模式】2、设计模式分类和单例设计模式
127 0
|
设计模式 Java
26、Java 简单实现单例设计模式(饿汉式和懒汉式)
26、Java 简单实现单例设计模式(饿汉式和懒汉式)
166 2
|
设计模式 安全 Java
在Java中即指单例设计模式
在Java中即指单例设计模式
97 0
|
11月前
|
设计模式 缓存 安全
「全网最细 + 实战源码案例」设计模式——单例设计模式
单例模式是一种创建型设计模式,确保一个类在整个程序运行期间只有一个实例,并提供一个全局访问点来获取该实例。它常用于控制共享资源的访问,如数据库连接、配置管理等。实现方式包括饿汉式(类加载时初始化)、懒汉式(延迟加载)、双重检查锁、静态内部类和枚举单例等。其中,枚举单例最简单且安全,能有效防止反射和序列化破坏。
222 7
|
设计模式 安全 Java
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
188 2
|
设计模式 存储 安全
设计模式——设计模式介绍和单例设计模式
饿汉式(静态常量)、饿汉式(静态代码块)、懒汉式(线程不安全)、懒汉式(线程安全,同步方法)、懒汉式(线程不安全,同步代码块)、双重检查(推荐,线程安全、懒加载)、静态内部类(推荐)、枚举(推荐)
设计模式——设计模式介绍和单例设计模式

热门文章

最新文章