IOS单例模式

单例模式是一种常见的软件设计模式。

通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。

如果希望系统中某个类的对象只能存在一个,单例模式是最好的解决反感。

IOS中最常见的单例就是UIApplication

单例的实现步骤:

1.重写allocWithZone方法

  allocWithZone方法是对象分配内存空间时,最终会调用的方法,重写该方法,保证只会分配个内存空间。

2.建立shaerdXXX类方法,便于其他类调用


+ (id)allocWithZone:(struct _NSZone *)zone
{
static DemoObj *instance;

// dispatch_once是线程安全的,onceToken默认为0
static dispatch_once_t onceToken;
// dispatch_once宏可以保证块代码中的指令只被执行一次
dispatch_once(&onceToken, ^{
// 在多线程环境下,永远只会被执行一次,instance只会被实例化一次
instance = [super allocWithZone:zone];
});

return instance;
}

+ (instancetype)sharedDemoObj
{
return [[self alloc] init];
}

还有一种常见的单例创建方式:


static DemoObj *instance;
+ (instancetype)sharedDemoObj
{
// 如果有两个线程同时实例化,很有可能创建出两个实例来
if (!instance) {
// thread 1 0x0000A
// thread 2 0x0000B
instance = [[self alloc] init];
}
// 第一个线程返回的指针已经被修改!
}

但是[[DemoObj alloc] init] 和[DemoObj sharedDemoObj]实例化的对象的内存地址是不一样的,还有就是线程不安全。

IOS单例模式,码迷,mamicode.com

时间: 2024-08-01 10:45:10

IOS单例模式的相关文章

iOS单例模式(Singleton)

单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模式的要点有三个:一是某个类只能有一个实例:二是它必须自行创建这个实例:三是它必须自行向整个系统提供这个实例. 2.单例模式的优点: 1.实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例. 2.灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程 iOS中的

iOS 单例模式

设计模式./-->是一种手段,一种工具.可以使代码的写起来更方便1. 代理设计模式(委托设计模式) <1>. 监听器的场合 对象B(保姆)想监听对象A(婴儿)的一些行为 <2>. 通知的场合 对象A(婴儿)发生了一些行为,想通知B(保姆)[B(保姆)为代理对象] <3>. 有些事情,不想自己处理,可以交给别人处理 对象婴儿发生了一些事情,不想自己处理,交给保姆处理 2. 代理设计模式的使用场合 当对象A发生了一些行为,想告知对象B-->[让对象B成为对象A的

iOs 单例模式的定义,实现、步骤

单例模式就是一个类在系统中最多只有一个实例对象,并通过一个全局的入口对这个实例对象进行访问. 对于共享的资源,实现多个对象去封装是不必要的,不光占用系统资源,还有可能造成冲突,所以一般使用单例模式. #import "DSSingletonObject.h" @implementation DSSingletonObject + (DSSingletonObject *)defaultObject { static DSSingletonObject *defaultObjectIns

iOS 单例模式 (设计模式一)

单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案. 主要优点: 提供了对唯一实例的受控访问. 由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能. 允许可变数目的实例. 主要缺点: 由于单利模式中没有抽象层,因此单例类的扩展有

ios单例模式详解

http://blog.csdn.net/a451493485/article/details/8624990 C代码   @implementation AppShareDataManager static AppShareDataManager * shareDataManager = nil; @synthesize theCurrentLanguage; @synthesize presentModalFlag; .......... +(AppShareDataManager *) s

iOS 单例模式实现的两种方式

简述面向对象应用程序中的单例类(singleton class)总是返回自己的同一个实例.它提供了对象所提供的资源的全局访问点.与这类设计相关的设计模式称为单例模式. 用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问. 这个方法应该是静态方法,因为让类的实例去生成另一个唯一实例毫无意义. 2.2 何时使用单例模式(1)类只能有一个实例,并且必须从一个为人熟知的访问点对其进行访问,比如工厂方法: (2)这个唯一的实例只能通过子类化进行扩展,而且扩展的对象不会破坏客户端代码.

iOS 单例模式 学习 &quot;52个方法 第6章 45条 使用 dispath_once 来执行只需运行一次的线程安全代码&quot;

百度定义:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例. 维基百科:在软件工程中,单例是一种用于实现单例的数学概念,即将类的实例化限制成仅一个对象的设计模式. 简单理解:单例模式 是只有有一个实力对象的设计模式 这次 使用 单例 用 gcd 来创建 解释几个关键词 dispatch_once  :这个代码块 在整个应用的生命周期 只执行一次, 并且线程安全(如果被多个线程调用,该函数会同步等待直至代码块完成.gcd的

iOS 单例模式范例

The singleton pattern is useful for creating objects that are shared across the entire application, such as an HTTP client or a notification manager, or objects that may be expensive to create, such as formatters. + (instancetype)sharedInstance { sta

IOS单例模式推荐写法(转载)

1 +(instancetype)sharedUserLoginModel{ 2 3 static YLWUserLoginModel *instance; 4 5 static dispatch_once_t onceToken; 6 7 dispatch_once(&onceToken, ^{ 8 9 instance = [[YLWUserLoginModel alloc]init]; 10 11 }); 12 return instance; 13 14 } 这种写法的好处是: 1. 线