iOS开发笔记-4:单例模型

    #import 

    @interface JJUserManager : NSObject

    + (JJUserManager*)defaultManager;

    @end

#import "JJUserManager.h"

@implementation JJUserManager

//单例模式对外的唯一接口,用到的dispatch_once函数在一个应用程序内只会执行一次,且dispatch_once能确保线程安全
+(JJUserManager *)defaultManager {
//单例类的静态实例对象,因对象需要唯一性,故只能是static类型
static JJUserManager *defaultManager = nil;
static dispatch_once_t single;
dispatch_once(&single, ^{
     if(defaultManager == nil) {
         defaultManager = [[self myAlloc] init];
     }
});
return defaultManager;
}

#pragma mark - 覆盖创建代码,严格意义上的单例

+(instancetype)myAlloc{
    return [super allocWithZone:nil];
}
//提示无法使用alloc创建,防止因为忘记等原因而使用alloc
+(instancetype)alloc {
    NSAssert(0, @"这是一个单例对象,请使用+(JJUserManager *)defaultManager方法");
    return nil;
}
+(instancetype)allocWithZone:(struct _NSZone *)zone {
    return [self alloc];
}
+(instancetype)new {
    return  [self alloc];
}

-(id)copy {
    NSLog(@"JJUserManager是一个单例对象,copy将不起任何作用");
    return self;
}

你可能感兴趣的:(iOS开发笔记-4:单例模型)