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

本文详细阐述了单例模式的概念、使用场景及原则,并以CocoaTouch为例展示了其在实际开发中的应用。重点介绍了如何在代码中实现单例模式,以及在不同情况下的最佳实践。

简述
面向对象应用程序中的单例类(singleton class)总是返回自己的同一个实例。它提供了对象所提供的资源的全局访问点。与这类设计相关的设计模式称为单例模式。

用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。

这个方法应该是静态方法,因为让类的实例去生成另一个唯一实例毫无意义。

2.2 何时使用单例模式
(1)类只能有一个实例,并且必须从一个为人熟知的访问点对其进行访问,比如工厂方法;

(2)这个唯一的实例只能通过子类化进行扩展,而且扩展的对象不会破坏客户端代码。

2.3 单例的原则
(1)发起调用的对象(calling object)不能以其他分配方式实例化单例对象。否则,就有可能创建单例类的多个实例。

(2)对单例对象实例化的限制应用与引用计数内存模型共存。

2.4 Cocoa Touch中常见的单例模式
UIApplication,UIAccelerometer和NSFileManager类。//SharedSingleton.h 文件#import <Foundation/Foundation.h>


@interface SharedSingleton : NSObject{
    NSString *name;
}
@property(nonatomic,retain)NSString *name;

+(id)sharedSingleton;

@end

//SharedSingleton.m文件
#import "SharedSingleton.h"
//创建静态变量,初始化为nil
static SharedSingleton *s = nil; @implementation SharedSingleton @synthesize name = _name; +(SharedSingleton *)sharedSingleton{ //第一种方式. // if (s == nil) { // s = [[SharedSingleton alloc]init]; // } // return s; //gcd方式 static dispatch_once_t once; dispatch_once(&once,^{ s = [[SharedSingleton alloc]init]; }); return s; } @end

 

转载于:https://www.cnblogs.com/shinechen/p/4086937.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值