IOS 单例模式

  1. 单例模式 是一个类在系统中只有一个实例对象。通过全局的一个入口点对这个实例对象进行访问。在iOS开发中,单例模式是非常有用的一种设计模式。可以保证在程序运行过程,一个类只有一个实例
  2. 实现单例模式的条件 实现单例模式有三个条件:
    1 类的构造方法是私有的
    2 类提供一个类方法用于产生对象
    3 类中有一个私有的自己对象
    针对于这三个条件,OC中都是可以做到的
    类的构造方法是私有的我们只需要重写allocWithZone方法,让初始化操作只执行一次
    类提供一个类方法产生对象这个可以直接定义一个类方法
    类中有一个私有的自己对象我们可以在.m文件中定义一个属性即可
  3. 应用场景
    1 某个类经常被使用(节约系统资源)
    2 定义工具类
    3 共享数据
  4. 注意点
    1 不要继承单例类
    2 先创建子类永远是子类对象
    3 先创建父类永远是父类对象
  5. 单例模式:
    1 懒汉模式 : 第一次用到单例对象的时候再创建
    2 饿汉模式 : 一进入程序就创建一个单例对象
    (下面上代码)

第一种添加互斥锁方式生成,这样做可以避免两个对象同时访问或者修改数据导致出错
第二种使用GCD方式创建的

static TestSinglePattern *pattern = nil;
//第一种方法
+(instancetype)sharedInstance{
    @synchronized (self) {
        if (singlePattern==nil) {
            singlePattern = [[self.class alloc]init];
        }
    }
    return singlePattern;
}
//第二种方法
+(instancetype)dispatchOnce{
    static TestSinglePattern *pattern = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        pattern = [[self.class alloc]init];
    });
    return pattern;
}
//通过alloc创建对象
+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        singlePattern = [super allocWithZone:zone];
    });
    return singlePattern;
}
#pragma NSCoping 协议复制对象的时候
//复制对象
- (id)copyWithZone:(NSZone *)zone
{
    return singlePattern;
}
//可变复制
- (id)mutableCopyWithZone:(NSZone *)zone {
    return singlePattern;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值