我在代码中创建了一个SinglestonClass,但是我遇到了问题。 我的变量在-init方法中初始化,但是当我调用singlestonClass时,这些变量会重新初始化。 你能帮我为我的变量创建一个初始化吗? 感谢。
@implementation SingletonController
@synthesize arrayPosition;
@synthesize arrayMovement;
@synthesize actualPosition;
@synthesize actualMove;
@synthesize stopThread;
+(SingletonController*)sharedSingletonController{
static SingletonController *sharedSingletonController;
@synchronized(self) {
if(!sharedSingletonController){
sharedSingletonController = [[SingletonController alloc]init];
}
}
return sharedSingletonController;
}
//I don't want a re-initialization for these variables
-(id)init{
self = [super init];
if (self != nil) {
arrayPosition = [[NSMutableArray alloc]init];
arrayMovement = [[NSMutableArray alloc]init];
actualPosition = [[Position alloc]init];
actualMove = [[Movement alloc]init];
stopThread = FALSE;
}
return self;
}
-(void) dealloc {
[super dealloc];
}
@end
答案 0 :(得分:2)
除了你的单例类本身之外,任何人都不应该调用你的init方法。这就是sharedSingletonController方法的用途。这是您的工厂方法,负责返回类的相同静态实例。我还建议您重命名单例对象的静态实例和/或sharedSingletonController选择器本身,以消除两者之间的歧义并进行更清晰的设计。在这种特殊情况下,可能会使那些必须阅读您的代码的人感到困惑。
如果没有看到客户端代码如何调用您的单件工厂方法,则很难解释您的问题所在。我们需要查看其余代码,包括如何调用它。在您的客户端代码中,您应该使用以下内容:
SingletonController *sigController = [SingletonController sharedSingletonController];
不要这样做:
SingletonController *sigController = [[SingletonController alloc] init];
阅读here以获取“可可基础指南”中的更多信息。