美文网首页
ios 确保单例对象的唯一性

ios 确保单例对象的唯一性

作者: pipiOU | 来源:发表于2019-11-22 17:52 被阅读0次

之前创建单例是使用下面的方式:


+ (instancetype)shareHandle{

static SingleHandle *share = nil;

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

share = [[SingleHandle alloc] init];

});

return share;

}

这种方式创建的单例,如果外部使用了alloc方法来创建实例,或者copy方法拷贝了单例实例,那么就无法确保对象的唯一性,因此需要重写allocWithZone:和copyWithZone:方法来规避外部创建多个单例对象。

+ (instancetype)shareHandle{
    static SingleHandle *share = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        share = [[super allocWithZone:NULL] init];    });
    return share;
}

//规避外部使用alloc方法创建实例
+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
    return [self shareHandle];
}

//规避外部使用copy操作来创建单例对象
- (id)copyWithZone:(NSZone *)zone
{
    return self;
}

说明:
1.在调用alloc方法时,OC内部会调用allocWithZone:这个方法来申请内存.

2.NSObject虽然有copy 和 mutableCopy方法,但是并没有实现,需要在子类中遵循NSCopying协议,即实现copyWithZone:方法.

相关文章

  • ios 确保单例对象的唯一性

    之前创建单例是使用下面的方式: 这种方式创建的单例,如果外部使用了alloc方法来创建实例,或者copy方法拷贝了...

  • 单例模式(singleton)

    转载 确保对象的唯一性——单例模式 (一)确保对象的唯一性——单例模式 (二)确保对象的唯一性——单例模式 (三)...

  • Android面试记录#1:Android中单例模式的作用范围

    面试中被问到了老生常谈的单例模式,之前看得比较浅,只觉得单例模式保证对象的全局唯一性,那么这个“全局唯一性”针对一...

  • 设计模式

    史上最全设计模式导学目录(完整版) 单例模式(Singleton Pattern) 确保对象的唯一性——单例模式 ...

  • 单例模式

    单例模式 适用于消耗资源过多的对象 构造函数为private 通过一个静态方法或枚举返回单例类的对象 确保单例类的...

  • java单例设计模式

    单例设计模式就是要保证单个类的对象在内存中的唯一性。外部不能new单例设计的 类对象,所以必须私有其构造方法。 保...

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

    要求:构造函数设置为private、通过静态方法或枚举返回单例对象确保单例对象有且只有一个(尤其是多线程环境)、且...

  • Java Singleton 单例模式

    单例模式 属于创建型模式 自行完成实例化,私有化构造函数 单例模式的目标 实例唯一性 线程安全性 任何情况都需要确...

  • 单例模式

    单例模式 单例模式的特点: 构造函数不对外开放,一般为Private 通过一个静态方法返回一个单例类对象 确保单例...

  • TS中使用单例模式实例对象,及存取值

    单例模式实例对象优点:可以保证实例对象的唯一性,及数据的正确性 示例代码:model层(数据层) controll...

网友评论

      本文标题:ios 确保单例对象的唯一性

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