iOS开发总结(A0)- 如何使用单例

本文详细介绍了iOS中实现单例模式的一种完善方法,包括如何处理copy和alloc的情况,并提供了清理数据的接口以节省内存。此外,还讨论了单例模式中使用block的注意事项以及满足子类化和多线程需求的设计考量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时某个类需要一个实例就可以了,比如ios 中的NSFileManager, NSUserDefault,在app运行的任何时刻,都只有一个实例。

一般用来管理共享的资源、逻辑等。

 

1. 以下是在ios中构建单例的一种逻辑比较完善的方法,考虑了copy,alloc 的使用情况

static TBOGameSetting * _sharedInstance;

+(instancetype)sharedGameSetting{

   

  _sharedInstance=[[self alloc]init];

    return_sharedInstance;

 

}

+(instancetype)allocWithZone:(struct _NSZone *)zone{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        //dispatch_once 保证在程序运行中只执行一次

        _sharedInstance=[[super allocWithZone:zone]init];

    });

    return _sharedInstance;

 

}

-(id)copy{

    return _sharedInstance;

}

 

 

2. 业务中,单例一般管理共享的资源,而单例一般初始化后就不再释放,

为了更有效的利用内存,有必要暴露一个清除数据的接口,如下:

可以再合适的时候清理管理的数据,以节省内存。

 

-(void)clearData;

 

 

3. 在单例中要小心使用block,

单例在app一个session中一般不释放,如果在单例中不当使用block,有可能单例会一直保持对其它对象(也许已经需要了)的引用,导致内存泄露。

 

4. 另外还要注意是否有子类化的需求,及多线程访问的需求是否能够满足

转载于:https://www.cnblogs.com/beddup/p/4611403.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值