zoukankan      html  css  js  c++  java
  • iOS开发总结(A0)- 如何使用单例

    有时某个类需要一个实例就可以了,比如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. 另外还要注意是否有子类化的需求,及多线程访问的需求是否能够满足

  • 相关阅读:
    之前的博客
    用struts2 s2-045漏洞拿站记录
    修改BlackLowKey皮肤样式,增加占屏比
    SpringBoot自动配置原理
    CAS无锁技术
    CAS单点登录原理解析
    死锁与活锁的区别,死锁与饥饿的区别
    jvm问题
    jdk动态代理的实现原理
    抽象工厂
  • 原文地址:https://www.cnblogs.com/beddup/p/4611403.html
Copyright © 2011-2022 走看看