单文档在多文档中

时间:2012-05-25 03:41:39

标签: objective-c xcode macos cocoa singleton

我习惯使用像这样的单身:

///.h
@interface ASMyController:NSViewController
+(id)myViewController;
@end
////.m
static ASMyController* singleton = nil;
@implementation ASMyController
+(id)myViewController
{
    if(nil == singleton)
    {
        singleton = [[[self class] alloc] init];
    }
    return singleton;
}
-(id)init
{
    self = [super initWithNibName:@"test" bundle:xxxx];
    if(self)
    {
        ..............................
    }
    return self;
}
@end

单例在非文档库应用程序中运行良好。但是,在基于文档的应用程序中,每个app实例共享相同的静态变量。在我的第一个设计中,单例一个,仅在应用实例中,但不是所有应用实例。

这是否意味着我应该重新考虑设计?或者我可以将单身人士变成一个单词。我可以使用key来获取当前实例的单例?或者对我来说还有什么好主意?

我祈祷我可怜的英语不会给你带来麻烦..

1 个答案:

答案 0 :(得分:0)

你的方法的名称my...表明一些相当基本的东西被误解了 - 每个人只有一个单独的,对象没有他们自己的单身人士副本

单例不是避免变量的一种方法,看起来您可能尝试使用[ASMyController myViewController]而不是实例变量self->myViewController(通常缩写为myViewController)或属性self.myViewController

您可能需要查看以下内容:

@interface ASMyDocument : NSDocument
{
   ASMyContoller *myViewController;
}

然而,您的原始设计建议您应该仔细检查类,实例,单例,has-a,is-a等之间的关系。