单身人士每次发布时都会创建

时间:2015-12-11 05:54:24

标签: ios singleton

我对如何有效使用singleton感到困惑。我希望我的singleton课程表现得像[NSUserDefaults standardUserDefaults]。但我观察到的是,每次创建新对象时,我每次都会看到不同的内存地址。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

MyManager *sharedManager = [MyManager sharedManager];

if(sharedManager.name.length==0) {
sharedManager.name = @"manager";  
    }


return YES;
}



+ (id)sharedManager {
    static MyManager *sharedMyManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedMyManager = [[self alloc] init];
    });
    return sharedMyManager;}

每次启动时,if子句都在执行。

1 个答案:

答案 0 :(得分:1)

您想要达到的目标不是singleton所做的。

singleton是一个对象,在应用程序运行时只有一个实例。如果您连续10次致电[MyManager sharedManager],那么您每次都会获得相同的地址。

退出应用程序后,与其他任何对象一样,singleton将被销毁。下次启动应用程序时,您将创建一个全新的singleton,而不会创建任何旧数据。

NSUserDefaults即使在退出并重新启动应用程序之后也能够记住数据,因为它是persisting数据到磁盘(即在某处写入文件)。如果你想有类似的行为,你可以&# 39; ll还需要将数据保存到文件中并在启动时读取该文件。