SharedInstanceGCD 1.0.2

SharedInstanceGCD 1.0.2

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2014年12月

未声明 维护。



  • 作者:
  • Tim Shadel

最佳 GCD 单例宏的集合。

清理您的代码!

有很多 GCD 单例宏。有些来自 Apple,有些在 Github 上,有些在 Stack Overflow。这个集合将三种主要类型放入一个头文件,可轻松通过 CocoaPods 包括。

创建单例

使用这些宏,有三种主要方式创建单例。

使用 sharedInstance

在我看来这是最好的一个。它遵循了最近 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

使用 sharedClassname

这个遵循了 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。

我已经整合了由多个人编写的宏。如果您想查看其中几个,请参阅 此 gist,以及这篇文章 SO