iOS设计模式 - 单例

iOS设计模式 - 单例

 

原理图

 

说明

1. 单例模式人人用过,严格的单例模式很少有人用过

2. 严格的单例模式指的是无法通过常规的 alloc init 方法来生成对象,派生出来的子类也不能产生出对象,而只能通过单例的方法获取到对象

 

源码

https://github.com/YouXianMing/iOS-Design-Patterns

//
//  Singleton.h
//  SingletonPattern
//
//  Created by YouXianMing on 15/8/6.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Singleton : NSObject

+ (Singleton *)sharedInstance;

@end
//
//  Singleton.m
//  SingletonPattern
//
//  Created by YouXianMing on 15/8/6.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "Singleton.h"

#define  STR_SINGLETON  @"STR_SINGLETON"

static Singleton *_sharedSingleton = nil;

@implementation Singleton

+ (Singleton *)sharedInstance {

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{

        _sharedSingleton = (Singleton *)STR_SINGLETON;
        _sharedSingleton = [[Singleton alloc] init];
    });

    return _sharedSingleton;
}

- (instancetype)init {

    NSString *string = (NSString *)_sharedSingleton;
    if ([string isKindOfClass:[NSString class]] && [string isEqualToString:STR_SINGLETON]) {

        self = [super init];
        if (self) {

        }

        return self;

    } else {

        return nil;
    }
}

@end

细节

保证只能从shareInstance方法获取实例的技巧

时间: 2024-12-31 07:56:08

iOS设计模式 - 单例的相关文章

iOS利用单例实现不同界面间的数据传输

  首先写一个单例类,继承NSObject check.h文件中 @property(strong ,nonatomic) UITable * Table; @property(strong ,nonitomic) UITextFiled * Text; +(check*)shareDataModle; check.m中 //定义一个静态的checke类的对象,并赋给一个空值 static check * dataModle = nil; +(check*)shareDataModle { if

iOS中类单例方法的一种实现

在Cocos2D编程中,很多情况我们需要类只生成一个实例,这称之为该类的单例类. 一般我们在类中这样实现单例方法: +(instancetype)sharedInstance{ static Foo *sharedInstance; if(!sharedInstance){ sharedInstance = [Foo new]; } return sharedInstance; } 注意静态变量sharedInstance也可以放到类外部去. 但是如果是多线程环境中,上述方法并不能一定保证生成唯

iOS设计模式 - 单例模式

IOS设计模式单例类 Made By HeYang 内容大纲: 1.单例模式 2.编写严格的单例 3.利用单例模式优化本地存储 4.重写allocWithZone实现单例 5.使用异常处理强制避免init创建实例 6.MRC下的单例模式,然后宏定义抽取单例类(兼顾ARC和MRC) 7.附录 1.单例模式 单例模式的描述: 系统中的一个类只提供一个实例供外界使用. 下面举几个IOS开发中常用的几个单例: [[UIApplication sharedApplication] statusBarFra

【秒懂设计模式】单例设计模式

 秒懂设计模式--单例设计模式 (三)单例设计模式 1.先解释一下,什么是单例模式呢? 在Java中是这样定义的:"一个类有且仅有一个实例,并且自行实例化向整个系统提供." 显然从单例模式的定义中,我们可以发现它有三个要点: ①某个类只能有一个实例: ②它必须自行创建这个实例: ③它必须自行向整个系统提供这个实例. 2.要满足这三个要点,应该如何实现呢?下面让我们来逐条分析: ①如何保证某个类只能有一个实例? 让我先来想一下,一个类的对象是如何创建的呢?答案是:一个类的对象的产生是由类

ios-iOS UIViewController 单例及helper class的应用

问题描述 iOS UIViewController 单例及helper class的应用 我按照网上的方式写singleton,每次进到SecondViewController,打印的地址都是同一个,但是为什么界面上的UISwitch都是初始化的?我是进了原来的UIViewController吗?还有人建议写helper class,刚开始接触iOS,不是很明白,有没有Demo或者介绍一下基本原理可以么? 解决方案 界面上的UISwitch并不会感知到你singleton的变化,你需要在页面加载

Java设计模式中单例设计模式

什么是设计模式? 设计模式就是解决某一类问题最为行之有效的方法 Java中有23中设计模式,接下来要讲的是单例设计模式 单例设计模式:解决一个类在内存只存在一个对象 其目的为:想要保证对象唯一 有以下几张情况,可以考虑使用单例设计模式 1.为了避免其他程序过多建立该类对象,新禁止其他程序建立该类对象 2.还W为了让其他程序可以访问到给类对象,只好在本类中,自定义一个对象 3.为了方便其他程序对自定义对象的访问,课对外提供一些访问方式 如何用代码实现这一目的? 用以下三步代码体现; 1.将构造函数

IOS 单例设计模式解读

IOS 中单例设计模式的解读与用法 一.单例的作用       顾名思义,单例,即是在整个项目中,这个类的对象只能被初始化一次.它的这种特性,可以广泛应用于某些需要全局共享的资源中,比如管理类,引擎类,也可以通过单例来实现传值.UIApplication.NSUserDefaults等都是IOS中的系统单例. 二.单例的写法        单例的写法常用的有两种方式:        方式1.不考虑线程 ? 1 2 3 4 5 6 7 8 static SingleCase *manager = 

iOS 使用 dispatch_once 创建线程安全的单例

使用 dispatch_once 创建单例 Creating singletons using dispatch_once 无论喜欢与否,有时你确实需要使用单例.事实上,每一个 iOS 和 Mac OS 应用都至少用到了一个单例:UIApplication 或NSApplication. Love them or loathe them, sometimes you need to have a singleton. In fact every iOS and Mac OS applicatio

(单例设计模式中)懒汉式与饿汉式在多线程中的不同

/*  目的:分析一下单例设计模式中,懒汉式与饿汉式在多线程中的不同!  开发时我们一般选择饿汉式,因为它简单明了,多线程中不会出现安全问题!  而饿汉式需要我们自己处理程序中存在的安全隐患,但是饿汉式的程序技术含量更高! */ /* class SinglePerson implements Runnable{    private static SinglePerson ss = new SinglePerson("hjz", 22);//恶汉式    private int ag