iOS-设计模式-单例

来聊聊关于设计模式,首先来说说单例,这个是我们面向对象最最最常见的一种设计模式吧,一般适用于app中独一无二的对象,比如说音乐播放器,这个对象在整个app是不变的,是不能将其释放而重建的。进入播放页面,播放音乐,退出页面再次进来时,这个播放器的状态不能是初始化状态了,这是我们就应该用到单例设计模式,永远保证程序中只有一份而且不能被释放。AFN自从由NSURLRequest用了NSURLSession之后也是有内存泄漏的,用了单例就不会出现了,单例设计模式就是充分利用了static这个关键字+GCD。

修饰局部:1:当static关键字修饰局部变量时,该局部变量只会初始化一次,在系统中只有一份内存 2:static关键字不可以改变局部变量的作用域,但是可延长局部变量的生命周期,该变量直到整个项目结束的时候才会被销毁
修饰全局:1:作用域仅限于当前文件,外部类不可以访问到该变量

1>方式一:static修饰的局部

+ (AFHTTPSessionManager *)sharedHTTPSession{
    static AFHTTPSessionManager *_manager;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _manager = [AFHTTPSessionManager manager];
    });
    return _manager;
}

2>方式二:static修饰的全局

// 用来保存唯一的单例对象
static id _instace;

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

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

- (id)copyWithZone:(NSZone *)zone
{
    return _instace;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容