2015-12-11 4 views
0

Я смущен о том, как эффективно использовать singleton. Я хочу, чтобы мой класс singleton вел себя как [NSUserDefaults standardUserDefaults]. Но я наблюдал каждый раз, когда он создает новый объект, и каждый раз вижу другой адрес памяти.singleton создаются каждый раз при каждом запуске

- (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;} 

каждый раз при запуске, если выполняется условие.

+0

Конечно, это так. Синглтон длится только при запуске приложения. 'NSUserDefaults' ничем не отличается. Если вы хотите, чтобы данные выжили при запуске приложений, вам необходимо сохранить и восстановить данные из файла или другого хранилища. – rmaddy

ответ

1

Что вы хотите достичь, это не то, что делает singleton.

A singleton - это объект, для которого есть только один экземпляр во время работы приложения. Если вы вызываете [MyManager sharedManager] 10 раз подряд, вы будете получать тот же адрес каждый раз.

Как только вы покинете приложение, как и любой другой объект, уничтожается singleton. В следующий раз, когда вы запустите приложение, вы получите совершенно новый singleton, который будет создан без каких-либо старых данных.

может запоминать данные даже после выхода из системы и перезапуска приложения, поскольку это persisting данные на диске (то есть запись файла где-то). Если вы хотите иметь подобное поведение, вам также необходимо будет сохранить данные в файл и прочитать этот файл при запуске.

Смежные вопросы