最佳 GCD 单例宏的集合。
清理您的代码!
有很多 GCD 单例宏。有些来自 Apple,有些在 Github 上,有些在 Stack Overflow。这个集合将三种主要类型放入一个头文件,可轻松通过 CocoaPods 包括。
使用这些宏,有三种主要方式创建单例。
在我看来这是最好的一个。它遵循了最近 Cocoa 模块中的通用命名约定,并且不需要任何参数。
第一个示例依赖于您的类的指定初始化器仅为 init
的约定。第二个使用一个块来允许您调用任何初始化器。
sharedInstance,默认初始化器
// MyClass.h
@interface MyClass
+ (instancetype)sharedInstance;
@end
// MyClass.m
@implementation MyClass
SHARED_INSTANCE_CGD
@end
sharedInstance,自定义初始化器
// MyClass.h
@interface MyClass
+ (instancetype)sharedInstance;
@end
// MyClass.m
@implementation MyClass
SHARED_INSTANCE_GCD_USING_BLOCK(^{
return [[MyClass alloc] initWithAnotherInitializer];
})
@end
这个遵循了 Cocoa 模块中较久远的命名约定,需要通知我们这个类是什么。
sharedClassname,默认初始化器
// Database.h
@interface Database
+ (instancetype)sharedDatabase;
@end
// Database.m
@implementation Database
SHARED_INSTANCE_CGD_WITH_NAME(Database)
@end
sharedClassname,自定义初始化器
// Database.h
@interface Database
+ (instancetype)sharedDatabase;
@end
// Database.m
@implementation Database
SHARED_INSTANCE_GCD_WITH_NAME_USING_BLOCK(Database, ^{
return [[Database alloc] initWithAnotherInitializer];
})
@end
这提供了最大的灵活性:您可以使用任何方法名称。与其他选项不同,您必须在实现文件中定义该方法。
仅使用方法体方法
// Utility.h
@interface Utility
+ (instancetype)defaultUtility;
@end
// Utility.m
@implementation Utility
+ (instancetype)defaultUtility
{
DEFINE_SHARED_INSTANCE_GCD_USING_BLOCK(^{
return [[Utility alloc] initWithAnotherInitializer];
})
}
@end
您可以直接将头文件复制到您的项目中。
如果您想更新,请使用 CocoaPods
pod 'SharedInstanceGCD'
MIT。