iOS单例模式的实现方法总结
来源:互联网 发布:usb网络打印服务器使用 编辑:程序博客网 时间:2024/06/07 19:33
- 概念
- 实现方法
@synchronized(self) //线程同步{if (sharedSingleton == nil){//因为已经在self中重载了基本的对象分配方法,所以这里要用super,否则会发生循环调用
sharedSingleton = [[super allocWithZone:NULL] init];
}}return sharedSingleton;
return [self defaultSingleton];
return self;
return self;
return UINT_MAX; //denotes an object that cannot be released
//do nothing
return self;
GCD中有这样一个函数:void dispatch_once( dispatch_once_t *predicate, dispatch_block_t block),其中第一个参数predicate,该参数是检查后面第二个参数所代表的代码块是否被调用的谓词,第二个参数则是在整个应用程序中只会被调用一次的代码块。dispach_once函数中的代码块只会被执行一次,而且还是线程安全的。
+(MySingletonClass *) defaultSingleton
{
static MyClass *sharedSingleton;
static dispatch_once_t once;
dispatch_once(&once,^{
sharedEntity = [[MySingletonClass alloc] init];
});
return sharedSingleton;
}
注意:使用上面例子来实现的单例是“伪单例”,也就是说只有当使用者用MySingletonClass *obj = [MySingletonClassdefaultSingleton];方式来取得对象时候才算是单例,但是我们无法阻止编程者直接使用alloc来创建自己的对象。
- 单例的子类化
对于方法1创建的单例,如果不加修改的子类化MySingleton,返回的实例总是MySingleton本身,因为MySingleton重载了所有实例化相关的方法,所以对其子类化需要特别的技巧。我们可以使用一些Foundation框架中的函数,根据类的类型实例化任何对象。其中一个是id NSAllocateObject(Class aClass, NSUInteger, extraBytes, NSZone *zone),第一个参数是要实例化的类的类型;第二个是用于索引的实例变量的额外字节数,它总是0;第三个参数用于指定内存分配的区域,它一般为NULL,表示默认区域。通过指定类的类型,这个函数可以实例化任何对象。
如果用这个函数来创建单例,那么会变成这样:
@synchronized(self)
{
if (sharedSingleton == nil)
{//因为已经在self中重载了基本的对象分配方法,所以这里要用super,否则会发生循环调用}sharedSingleton = [NSAllocateObject([self,class], 0, NULL) init];}return sharedSingleton;
- iOS单例模式的实现方法总结
- IOS实现单例模式的几种实现方法
- IOS实现单例模式的几种实现方法
- 单例模式c++实现方法总结
- iOS方法--------单例模式的写法
- iOS单例模式的实现
- iOS singleton单例模式的实现
- iOS单例模式的实现
- iOS单例模式的实现
- iOS单例模式的实现
- iOS单例模式的实现
- iOS单例模式的实现
- iOS单例模式的实现
- iOS单例模式的实现
- iOS单例模式的实现
- iOS单例模式的实现
- ios单例模式的实现
- ios单例模式的实现
- RevitAPI: 如何在详图构件上创建尺寸标注
- 如何编写自定义标签?具体流程与分析(自定义标签快速入门)
- HDOJ-1709-The Balance 解题报告
- 类中默认的成员函数
- JAVA中int、String的类型转换
- iOS单例模式的实现方法总结
- mac 版本下载编译chromium最新源码
- ubuntu14.04 codeblocks 13.12 字体
- zepto.js 自定义打包集成其他模块构建流程
- select2 bootstrap 简单使用
- php 回调函数
- Apache Thrift - 可伸缩的跨语言服务开发框架
- 如何建立Activity退出工具类
- 动联出席2015中国(广州)国际POS机展顶级盛会