-1

我曾经像这样使用单例:

///.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

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

那么这是否意味着我应该重新考虑设计?或者我可以将单例制作成字典。我可以使用 key 来获取当前实例的单例吗?或者对我有什么好主意?

我祈祷我蹩脚的英语不会给你带来麻烦。。

4

1 回答 1

0

您的方法的名称my..., 暗示了一些相当基本的东西被误解了 -每个人都只有一个单例,对象不拥有自己的单例副本。

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

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

@interface ASMyDocument : NSDocument
{
   ASMyContoller *myViewController;
}

但是,您的原始设计表明您应该真正审查类、实例、单例、has-a、is-a 等之间的关系/含义。

于 2012-05-25T09:09:17.617 回答