iOS 创建一个在退出登录时可以销毁的单例

一、单例简介

单例模式是在软件开发中经常用的一种模式。单例模式通俗的理解是,在整个软件生命周期内,一个类只能有一个实例对象存在。

二、遇到的问题

在平时开发使用单例的过程中,有时候会有这样的需求,在用户登录成功时,将用户的信息记录在用户信息单例中,当用户退出登录后,因为这个用户单例的指针被静态存储器的静态变量引用着,导致用户单例不能释放,直到程序退出或者杀死后,内存才能被释放。那有没有一种方法能够在单例不需要的时候就释放掉,而不要等到App结束呢?下面就介绍一种可以销毁的单例。

三、代码

说的再多不如一句代码来的实在,直接上代码。

单例类如下所示:

SingletonTemplate.h文件

#import <Foundation/Foundation.h>

@interface SingletonTemplate : NSObject
/*!**生成单例***/
+ (instancetype)sharedSingletonTemplate;
/*!**销毁单例***/
+ (void)destroyInstance;
@end

SingletonTemplate.m文件

复制代码
static SingletonTemplate *_instance=nil;

@implementation SingletonTemplate

+ (instancetype)sharedSingletonTemplate {
    
    static dispatch_once_t onceToken;
    
    dispatch_once(&onceToken, ^{
        _instance=[[self alloc] init];
        
        NSLog(@"%@:----创建了",NSStringFromSelector(_cmd));
    });
    return _instance;
}

+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [super allocWithZone:zone];
    });
    return _instance;
}

+ (void)destroyInstance {

    _instance=nil;
}

- (id)copyWithZone:(NSZone *)zone
{
    return _instance;
}

- (void)dealloc {
    NSLog(@"%@:----释放了",NSStringFromSelector(_cmd));
}
复制代码

 

四、代码介绍

关于代码.h文件中有两个方法,一个是生成单例,另一个是销毁单例;其中销毁单例方法,是将静态存储区的静态变量指针置为nil,这样单例对象在没有任何指针指向的情况下被系统回收了。

运行程序,打印的结果如下

复制代码
- (void)viewDidLoad {
    [super viewDidLoad];
    
    [SingletonTemplate sharedSingletonTemplate];
    
    sleep(2);
    
    [SingletonTemplate destroyInstance];
    
}



打印结果:

2017-02-27 22:42:33.915 MyTestWorkProduct[3550:78078] sharedSingletonTemplate:----创建了
2017-02-27 22:42:35.990 MyTestWorkProduct[3550:78078] dealloc:----释放了
复制代码

 

posted @   滴水微澜  阅读(8167)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示