单例

单例的实现

+ (instancetype)sharedInstance {
    static dispatch_once_t once;
    static id _instance;
    dispatch_once(&once, ^{
        _instance = [[self alloc] init];
    });
    return _instance;
}


单例的使用

单例最适合的使用场景:

  1. 作用域是app的整个生命周期
  2. app生命周期中只有一份
  3. 在多个类或实例中均需要方便的访问

坏味道

  1. 作用域小,造成最后需要销毁单例。这种应该找对作用域,在作用域相关的对象类中声明一个实例变量。
  2. 单例中没有实例变量,各个实例方法没有用到实例变量。这种明显应该使用类方法。

依赖注入

依赖注入是一个很好的替代方案,可以解决生命周期和多线程造成的问题。
有一篇文章讲的比较详细了,这里不多做赘述,贴链接: https://objccn.io/issue-13-2/

其他

在这里说下静态方法(类方法)。如果一个方法没有用到实例变量,也没有修改实例的状态,这个方法不应该是实例方法,应该是类方法。比较明显的就是工具类中的工具方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值