目标c中的单例类

时间:2010-06-09 14:10:51

标签: iphone objective-c singleton

我在代码中创建了一个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

1 个答案:

答案 0 :(得分:2)

除了你的单例类本身之外,任何人都不应该调用你的init方法。这就是sharedSingletonController方法的用途。这是您的工厂方法,负责返回类的相同静态实例。我还建议您重命名单例对象的静态实例和/或sharedSingletonController选择器本身,以消除两者之间的歧义并进行更清晰的设计。在这种特殊情况下,可能会使那些必须阅读您的代码的人感到困惑。

如果没有看到客户端代码如何调用您的单件工厂方法,则很难解释您的问题所在。我们需要查看其余代码,包括如何调用它。在您的客户端代码中,您应该使用以下内容:

SingletonController *sigController = [SingletonController sharedSingletonController];

不要这样做:

SingletonController *sigController = [[SingletonController alloc] init];

阅读here以获取“可可基础指南”中的更多信息。