美文网首页
iOS 单例∞

iOS 单例∞

作者: HH思無邪 | 来源:发表于2020-04-12 09:45 被阅读0次

    提一嘴简书创建表格

    不同的变量在手机存储器中的存储位置

    序号 位置 存放的变量
    1 临时变量(由编译器管理自动创建/分配/释放的,栈中的内存被调用时处于存储空间中,调用完毕后由系统自动释放内存)
    2 通过alloc、calloc、malloc或new申请内存,由开发者手动在调用之后通过free或delete释放内存。动态内存的生存期可以由我们决定,如果我们不释放内存,程序将在最后才释放掉动态内存,在ARC模式下,由系统自动管理
    3 全局区域 静态变量(编译时分配,APP结束时由系统释放)
    4 常量 常量(编译时分配,APP结束时由系统释放)
    5 代码区 存放代码

    什么是单例

    简单的来说,一个单例类,在整个程序中只有一个实例,并且提供一个类方法供全局调用,为了保证在使用中始终都是存在的,所以单例是在存储器的全局区域,在编译时分配内存,只要程序还在运行就会一直占用内存,在APP结束后由系统释放这部分内存内存。

    系统为我们提供的单例类有哪些?

    UIApplication(应用程序实例类)
    NSUserDefaults(偏好设置)
    NSNotificationCenter(消息中心类)
    NSFileManager(文件管理类)
    NSURLCache(请求缓存类)
    NSHTTPCookieStorage(应用程序cookies池)
    

    使用场景

    经常调用的类,如播放音乐、网络请求、提示框等,我都会采用单例模式

    实现一个单例 --- 保证只创建一个实例

    GCD方式创建单例

    static id _instance;   
    
    + (instancetype)allocWithZone:(struct _NSZone *)zone  
    {   
        static dispatch_once_t onceToken;   
        dispatch_once(&onceToken, ^{   
            _instance = [super allocWithZone:zone];   
        });   
        return _instance;   
    }   
    
    + (instancetype)sharedInstance  
    {   
        static dispatch_once_t onceToken;   
        dispatch_once(&onceToken, ^{   
            _instance = [[self alloc] init];   
        });   
        return _instance;   
    }   
    
    - (id)copyWithZone:(NSZone *)zone   
    {   
        return _instance;   
    }  
    
    - (id)mutableCopyWithZone:(NSZone *)zone {   
        return _instance;   
    }
    

    相关文章

      网友评论

          本文标题:iOS 单例∞

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