iOS中的单例

作者: luodezhao | 来源:发表于2015-11-22 14:21 被阅读169次

什么是单例,为什么要用单例?

1,单例模式:

确保某一个类只有一个实例。单例模式只会生成一个对象。内存空间永远是一个,保证实体的唯一性。其他类可以通过全局的入口点对这个实例进行访问。iOS sdk中也有许多类使用了单例模式,例如UIApplication:当程序启动时,会调用UIApplicationMain方法,在该方法中,会实例化一个UIApplication对象,之后在程序中的任意地方调用shareApplication都将返回一个与当前应用程序相关的UIApplication实例。以及:[NSUserDefaluts standardUserDefaults]也是返回的一个单例对象,因为不能让不同的ud对象去修改文件

2,单例模式的使用:

1,GCD:

+ (MyDataHelper *)shareMyDataHelper {

static MyDataHelper * myDataHelper = nil;

static dispatch_once_t takeOnce;

dispatch_once(&takeOnce,^{

myDataHelper = [self alloc]init];

} );

return myDataHelper;

}

利用GCD,可以保证初始化代码只实现一次。前提是takeonce指针也必须是全局或者静态变量。

因为static 修饰的成员变量只会初始化一次,如果不声明为静态变量,那么每次进来,都会重置变量为nil,那么就会重新创建对象。

2,重写init,alloc方法,

1)先写一个创建单例的方法

static MyDataHelper * myDataHelper = nil;

+ (MyDataHelper *)shareMyDataHelper {

@synchronized(self)

{

if (myDataHelper == nil)

{

[self alloc]init];

}

return myDataHelper;

}

+ (id)allocWithZone:(NSZone *)zone//在alloc分配内存空间的时候,是调用的allocWithZone分配空间

@synchronized(self){

if (myDataHelper == nil)

{

myDataHelper = [super allocWithZone:zone];

return myDataHelper;

}

}

return nil;

-(id)init {

@synchronized(self){

if( self ==[super init])

{

//初始化

}

return self;

- (id)copyWithZone:(NSZone *)zone{

return self;

}

以下是非ARC模式下需要添加的

-(unsigned)retainCount{

return 1// 永远到返回1

}

- (oneway void)release {

释放的时候什么也不做 }

(oneway 修饰符)表示此操作是单项的,这样做意味着方法就算返回了什么,调用者也拿不到这个方法

如果需要实现单例的多态,就拿到单例对象之后,重新进行初始化就行。

相关文章

  • iOS 单例模式

    关于单例模式的详解,看完这几篇,就完全了然了。iOS 单例模式iOS中的单例模式iOS单例的写法

  • 单例

    iOS单例模式iOS之单例模式初探iOS单例详解

  • 单例模式 Singleton Pattern

    单例模式-菜鸟教程 iOS中的设计模式——单例(Singleton) iOS-单例模式写一次就够了 如何正确地写出...

  • iOS开发 单例使用问题

    iOS开发 单例使用问题 iOS开发 单例使用问题

  • iOS开发 单例使用问题

    iOS开发 单例使用问题 iOS开发 单例使用问题

  • iOS单例模式容错处理

    ios 单例模式容错处理 1、单例模式的使用和问题解决 在ios开发的过程中,使用单例模式的场景非常多。系统也有很...

  • ios~单例模式:

    在iOS OC中,一般我们都是用官方推荐的写法来写单例:GCD方式单例 分析单例 static SharedPer...

  • ios 开发中的单例模式

    其实iOS开发中的单例模式无非就是一个类创建的对象在程序中只有一个对象! iOS中的单例模式有分为赖汉式和饿汉式单...

  • iOS 单例模式 or NSUserDefaults

    本文内容:iOS的单例模式NSUserDefaults的使用总结:iOS单例模式 and NSUserDefaul...

  • 谈一谈iOS单例模式

    这篇文章主要和大家谈一谈iOS中的单例模式,单例模式是一种常用的软件设计模式,想要深入了解iOS单例模式的朋友可以...

网友评论

    本文标题:iOS中的单例

    本文链接:https://www.haomeiwen.com/subject/oxshcttx.html