ABMultiton 2.1.1

ABMultiton 2.1.1

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

Alexey Belkevich 维护。



Multiton 2.0.7

Multiton 是 singleton 的更佳替代品。它更灵活,并且编写实现时需要的代码行更少。

特性

  • 只需将 ABMultitonProtocol 包含到类接口中,即可建立一个类的共享实例。无需实现!
  • 当您不再需要类的共享实例时(单元测试时),将删除类的共享实例。没有永生实例了!
  • 指定应该删除共享实例的内存警告。
  • 使用自定义 init 方法(带参数)创建共享实例。
  • 设置一个自定义实例,该实例将作为 shared 返回。

警告

这并不是经典 multiton 的实现。此实现使用实例的 类名 作为访问实例的

安装

添加到 Podfile

pod 'ABMultiton'

使用

1. 共享实例

类应遵守 ABMultitonProtocol

#import "ABMultitonProtocol.h"
...
@interface MyClass : ParentClass <ABMultitonProtocol>
...
@end

这就是全部!ABMultiton 将在运行时添加 shared 方法的实现。您可以通过这种方式访问共享实例:

[MyClass.shared myMethod];
2. 带自定义初始化的共享实例

ABMultiton 如此实现 shared 方法:

return [[MyClass alloc] init];

如果需要使用一些自定义的 init 方法,您应自己按这种方式实现 shared 方法

#import "ABMultiton.h"
...
+ (instancetype)shared
{
    return [ABMultiton sharedInstanceOfClass:self.class withInitBlock:^id
    {
        MyClass *instance = [[MyClass alloc] initWithArgument:value];
        instance.someProperty = propertyValue;
        return instance;
    }];
}
3. 删除共享实例

在单元测试中非常有用。因此,如果不使用共享实例,可以通过此调用删除它:

[MyClass removeShared];

此方法也是由 ABMultiton 在运行时注入的。以下是方法实现:

[ABMultiton removeInstanceOfClass:MyClass.class];
4. 内存警告时删除共享实例

有时您不需要所有应用程序周期的共享实例。并且您可能希望在低内存时释放一些共享实例。这很简单。只需实现 ABMultitonProtocol 的可选方法 isRemovableInstance

@implementation MyClass
...
- (BOOL)isRemovableInstance
{
    return YES;
}

此实例将在内存警告时释放。或者,您可以手动通过此调用释放所有此类实例:

[ABMultiton purgeRemovableInstances];
5. 检查是否存在共享实例
BOOL isExists = [ABMultiton containsInstanceOfClass:[MyClass class]];
6. 线程安全

使用 ABMultiton 是线程安全的。

7. 重要警告

请尽量不要为类创建共享实例。所谓的“单例狂热”是一个广为人知的反模式。

子模块

ABMultiton 包含子模块 SetInstance。它允许替换或为将在 shared 方法调用中返回的类添加实例。这对于单元测试非常有用。

安装

pod 'ABMultiton' 替换为 pod 'ABMultiton/SetInstance'

使用
[ABMultiton setInstance:customInstance forClass:MyClass.class];

历史

版本

更新

关注 ABMultiton 的更新,请关注 @okolodev