4

在我的应用程序中,我使用一个名为 ClassA 的类(现在是一个单例)来管理内容。

因为它是一个单例,所以我使用这种行为在许多需要它的类中获取这个唯一实例。

但是现在,我不能再把这个类作为一个单例了,我需要一个 NSDocument 的实例。

所以我在我的 NSDocument 子类上创建了一个 ClassA 的实例,但问题是在需要它的类上传递这个对象。

我有这种结构:

Class1 <- Class2 <- Class3 <- 文档 -> ClassA

我需要访问 Class1 中 Document 的 ClassA 实例。

我可以使用依赖注入通过 init 或 setter 方法在 Class1 中传递 ClassA,但由于 Document 不能直接访问 Class1,我需要将其传递给 Class3,然后是 Class2,然后是 Class1。

这是唯一的方法吗?还是有其他更好的方法来处理它?

4

1 回答 1

1

我想说回到你的单例原则,但使用NSDocument作为ClassA对象字典的键;就像是:

static NSMutableDictionary *_classCache = [[NSMutableDictionary alloc] init];

+ (ClassA *)classAForDocument:(NSDocument *)document
{
    ClassA *classA = [_classCache objectForKey:document];
    if (classA == nil)
    {
       // Initialise with something specific to the document I guess...
        classA = [[ClassA alloc] init];
        [_classCache setObject:classA forKey:document];
    }
    return classA;
}

那么这只需要Class{1,2,3}知道他们所属的文件。

于 2012-07-31T14:47:51.427 回答