iOS单例模式的实现

作者: qiongyong | 来源:发表于2016-02-28 22:53 被阅读154次

转自于宏创学院:单例singleton模式–单例类的实现 – 宏创学院


以前写的单例类只是提供了一个 类方法让外界使用 并没有将alloc方法考虑进去,因为一般调用单例的方法 都是类方法 但是万一还是有人在多个地方获取单例对象的时候还是使用alloc怎么办呢?看了上面的教程才知道还有这种写法

其实,单例类的写法有很多种

这里先提供一般常用的三种单例类的写法:

如:我写一个UserInfo的单例类

1.使用GCD dispatch_once 整个程序运行间只执行一次

2.加线程锁 NSLock

3:使用@synchronized

但是上面的写法都是没有将外界会再次使用alloc的,而不是直接使用shareInstance类方法的情况考虑进去的,测试使用这个类方法创建 和 使用 alloc 创建的地址不是一样的,所以最好要防止这种情况出现


#import

//这里遵守NSCopying 是因为将copy考虑了进去 自定义的类要使用copy必须遵守这个,开发中不考虑这个的可以不遵守的

@interface Singleton:NSObject <NSCopying>

/**

*  获取单例类

*

*  @return 单例类对象

*/

+(instancetype)sharedInstance;

@en

#import "Singleton.h"

@implementationSingleton

staticid _instance;

+(instancetype)sharedInstance

{

staticdispatch_once_tonceToken;

dispatch_once(&onceToken,^{

_instance=[[selfalloc]init];

});

return_instance;

}

//实现这个方法以后 无论外界alloc多少次 不同的对象,它们的地址都是一样的

+(id)allocWithZone:(struct_NSZone*)zone

{

staticdispatch_once_tonceToken;

dispatch_once(&onceToken,^{

_instance=[superallocWithZone:zone];

});

return_instance;

}

//这个方法只有在遵守了NSCopying才会起作用 保证了 外界使用copy这个类的对象的时候,地址还是一样的

-(id)copyWithZone:(NSZone*)zone

{

return_instance;

}

@end


这样写的话无论调用alloc 还是我们提供的类方法创建出来的对象都是头一个对象

还有需要注意的是:一个父类是单例类,那么它的子类也是单例类 ,并且它的地址跟父类是一样的

相关文章

  • 单例

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

  • iOS 单例模式

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

  • iOS 单例模式 or NSUserDefaults

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

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • 单例模式

    一、实现单例模式 或者 二、透明的单例模式 三、用代理实现单例模式 四、JavaScript中的单例模式 在Jav...

  • python面试题-2018.1.30

    问题:如何实现单例模式? 通过new方法来实现单例模式。 变体: 通过装饰器来实现单例模式 通过元类来创建单例模式...

  • 单例模式之枚举类enum

    通过枚举实现单例模式 枚举类实现单例模式的优点 对于饿汉式单例模式和懒汉式单例模式了解的同学,使用以上两种单例模式...

  • 单例模式 Singleton Pattern

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

  • 单例模式

    单例模式及C++实现代码单例模式4种实现详解 c++11改进我们的模式之改进单例模式 单例模式(Singleton...

  • 单例模式和GCD单例实现

    1、传统单例模式2、GCD单例模式3、用宏实现GCD单例模式4、用宏实现GCD单例模式,名称随类名变化而变化 单例...

网友评论

    本文标题:iOS单例模式的实现

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