2024年2月20日发(作者:)

[1]sharedInstance = [2]sharedInstance = [3][[xxx alloc] init] = [4]copy = 三、可继承的单例1、平时的单例继承存在的问题先来看看平时的单例的输出:- (void)printSubNormalSharedInstance { NormalSharedInstanceClass *single1 = [NormalSharedInstanceClass sharedInstance]; NSString *singleMessage1 = [NSString stringWithFormat:@"[1]super sharedInstance = %@", single1]; NSLog(@"%@", singleMessage1);

SubNormalSharedInstanceClass *single2 = [SubNormalSharedInstanceClass sharedInstance]; NSString *singleMessage2 = [NSString stringWithFormat:@"[2]sub sharedInstance = %@", single2]; NSLog(@"%@", singleMessage2);

}打印的测试结果如下:[1]super sharedInstance = [2]sub sharedInstance = 2、可继承的单例的继承实现可继承的单例类:#import "InheritableSharedInstanceClass.h"#import @implementation InheritableSharedInstanceClass+ (instancetype)sharedInstance { id sharedInstance = objc_getAssociatedObject(self, @"cjSharedInstance"); if (!sharedInstance) { sharedInstance = [[super allocWithZone:NULL] init]; objc_setAssociatedObject(self, @"cjSharedInstance", sharedInstance, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } return sharedInstance;}+ (instancetype)allocWithZone:(struct _NSZone *)zone { return [self sharedInstance];}- (id)copyWithZone:(nullable NSZone *)zone { return [[self class] sharedInstance];}@end打印的测试结果如下: