【iOS7的一些总结】15、单例设计模式

简介: 1、基本概念 所谓单例,即某一个类始终只能返回一个实例,也可以理解为类本身就是一个实例。单例类通常适合作为某些保存全局应用信息的全局对象,以及部分耗费大量系统资源的重量级对象。

1、基本概念

所谓单例,即某一个类始终只能返回一个实例,也可以理解为类本身就是一个实例。单例类通常适合作为某些保存全局应用信息的全局对象,以及部分耗费大量系统资源的重量级对象。通过这种模式可以更简洁地涉及代码,或者提高应用的性能。常用的单例类有NSFileManager、NSUserDefault等。


2、创建单例涉及模式的基本步骤

(1)创建单例对象的静态实例,初始化为nil;

(2)创建类的类工厂方法,只有在这个类的实例为nil时生成一个该类的实例;

(3)重写allocWithZone方法,防止在alloc时产生另一个对象;

(4)实现NSCopy协议,覆盖release、autorelease、retain、retainCount方法以保证单例的状态;

(5)多线程环境中,使用@synchronized关键字,确保静态实例正确创建和初始化。

以下是一个单例类的定义事例:

//
//  UserContext.h
//  SingletonDemo
//
//  Created by YinWenjie on 14-12-11.
//  Copyright (c) 2014年 YinWenjie. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface UserContext : NSObject

@property (nonatomic, copy) NSString *strName;
@property (nonatomic, copy) NSString *strAddr;

+ (id)shareContext;

@end
//
//  UserContext.m
//  SingletonDemo
//
//  Created by YinWenjie on 14-12-11.
//  Copyright (c) 2014年 YinWenjie. All rights reserved.
//

#import "UserContext.h"

static UserContext *singletonInstance = nil;

@implementation UserContext

+ (id)shareContext
{
    @synchronized(self)
    {
        if (singletonInstance == nil)
        {
            singletonInstance = [[[self class] alloc] init];
        }
    }
    return singletonInstance;
}

#pragma mark - Make sure that only one instance is created
+ (id)allocWithZone:(struct _NSZone *)zone
{
    if (singletonInstance == nil)
    {
        singletonInstance = [super allocWithZone:zone];
    }
    return singletonInstance;
}

- (id)copyWithZone:(struct _NSZone *)zone
{
    return singletonInstance;
}

- (id)retain
{
    return singletonInstance;
}

- (oneway void)release
{
    
}

- (id)autorelease
{
    return singletonInstance;
}

- (NSUInteger)retainCount
{
    return UINTMAX_MAX;
}

@end


目录
相关文章
|
7月前
|
设计模式
单例设计模式步骤
单例设计模式步骤
35 1
|
7月前
|
设计模式 安全 测试技术
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
145 0
|
7月前
|
设计模式 安全 Java
最简单的设计模式是单例?
单例模式可以说是Java中最简单的设计模式,但同时也是技术面试中频率极高的面试题。因为它不仅涉及到设计模式,还包括了关于线程安全、内存模型、类加载等机制。所以说它是最简单的吗?
81 3
最简单的设计模式是单例?
|
7月前
|
设计模式 安全 Java
【设计模式】2、设计模式分类和单例设计模式
【设计模式】2、设计模式分类和单例设计模式
59 0
|
7月前
|
设计模式 消息中间件 安全
多线程编程设计模式(单例,阻塞队列,定时器,线程池)(二)
多线程编程设计模式(单例,阻塞队列,定时器,线程池)(二)
61 1
|
7月前
|
设计模式 Java
26、Java 简单实现单例设计模式(饿汉式和懒汉式)
26、Java 简单实现单例设计模式(饿汉式和懒汉式)
56 2
|
7月前
|
设计模式 安全 Java
在Java中即指单例设计模式
在Java中即指单例设计模式
41 0
|
3月前
|
设计模式 存储 安全
设计模式——设计模式介绍和单例设计模式
饿汉式(静态常量)、饿汉式(静态代码块)、懒汉式(线程不安全)、懒汉式(线程安全,同步方法)、懒汉式(线程不安全,同步代码块)、双重检查(推荐,线程安全、懒加载)、静态内部类(推荐)、枚举(推荐)
设计模式——设计模式介绍和单例设计模式
|
4月前
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
56 1
|
7月前
|
设计模式 安全 Java
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式