iOS 开发每天分享优质文章

iOS 中单例设计模式的解读

2017-04-10  本文已影响3739人  flowerflower

概念

在整个项目中只有一份内存,并不会分配很多内存,这个类的对象只能被初始化一次

单例的使用

方式一:不考虑线程

示例:
+ (instancetype)shareInstance {
    static LYUserManager *userManager;
    if(!userManager){
        userManager = [[LYUserManager alloc] init];
        
    return userManager;
       }
}

方式二:考虑线程

示例:
+ (instancetype)shareInstance {
    static LYUserManager *userManager;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        userManager = [[LYUserManager alloc] init];
    });
    
    return userManager;
}

单例的优化并设置断言

通过上面的方法,我们已经可以使用类方法来得到这个单例,但是如果是多人开发此项目,为了安全与管理代码的方便,也为了给不是这个单例的创作者但会用到这个单例的开发人员一些提示,让任何视图通过alloc创建对象的程序段断在此处,给程序员提示.我们通常会重写一些方法:
示例:

+ (instancetype)alloc{
    NSAssert(0, @"这是一个单例对象,请使用+(LYUserManager *)shareInstance方法");
    return nil;
}
+ (instancetype)allocWithZone:(struct _NSZone *)zone{
    return [self shareInstance];
}
+ (instancetype)new{
    return [self shareInstance];
}

上一篇 下一篇

猜你喜欢

热点阅读