Objective-C创建完整单例

单例模式简介

单例模式的百度百科

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例
单例模式的实现
第一步:声明
#import 

@interface ShareManager : NSObject

+ (instancetype)shareManager;

@end

第二步:实现步骤
#import "ShareManager.h"

@implementation ShareManager


static ShareManager *manager = nil;

/*
 创建单利,单利的唯一性
 */
+ (instancetype)shareManager{

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [[ShareManager alloc]init];
    });
    return manager;
}


/*
 覆盖该方法主要确保 alloc init方法创建对象的唯一性
 */
+ (instancetype)allocWithZone:(struct _NSZone *)zone{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [super allocWithZone:zone];
    });
    return manager;
}

/*
 确保通过copy产生对象的唯一性
 */
- (id)copy{
    return self;
}

/*
 确保通过mutableCopy产生对象的唯一性
 */
- (id)mutableCopy{
    return self;
}
@end

部分说明
1.由单例的唯一性可以知道,我们在使用单例模式时,一定要确保该单例类在全局只有一个实例化对象;
2.之所以会覆盖:+ (instancetype)allocWithZone:(struct_NSZone*)zone方法,是为了确保通过[[ShareManager alloc] init]方法来初始化对象时对象的唯一性,其中alloc会调用该方法,只是zone参数默认为nil;因为当前类覆盖了allocWithZone方法,所以只能通过它的父类来分配内存,即通过[super allocWithZone:zone]方式;
3.覆盖copy和mutableCopy方法,是为了确保通过copy和mutableCopy产生对象时对象的唯一性;

你可能感兴趣的:(Objective-C创建完整单例)