繁体   English   中英

目标c中的单例类

[英]Singleton class in objective c

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

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

如果不了解客户端代码如何调用您的单例工厂方法,则很难确定问题出在哪里。 我们需要查看其余的代码,包括如何调用它。 在客户端代码中,您应该使用诸如:

SingletonController *sigController = [SingletonController sharedSingletonController];

不要做:

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

在此处阅读更多可可基本指南中的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM