我习惯使用像这样的单身:
///.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来获取当前实例的单例?或者对我来说还有什么好主意?
我祈祷我可怜的英语不会给你带来麻烦..
答案 0 :(得分:0)
你的方法的名称my...
表明一些相当基本的东西被误解了 - 每个人只有一个单独的,对象没有他们自己的单身人士副本
单例不是避免变量的一种方法,看起来您可能尝试使用[ASMyController myViewController]
而不是实例变量self->myViewController
(通常缩写为myViewController
)或属性self.myViewController
。
您可能需要查看以下内容:
@interface ASMyDocument : NSDocument
{
ASMyContoller *myViewController;
}
然而,您的原始设计建议您应该仔细检查类,实例,单例,has-a,is-a等之间的关系。