Какая разница, когда я устанавливаю поток Python в качестве демона

Включена ли миграция постоянных хранилищ? Если вы только делаете тривиальные модификации модели, автоматическая миграция будет означать, что вам не нужно перезагружать данные.

 NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                               configuration:nil
                                                         URL:storeURL
                                                     options:@{
                                                        NSMigratePersistentStoresAutomaticallyOption:@YES,
                                                        NSInferMappingModelAutomaticallyOption:@YES,
                                                        NSSQLiteAnalyzeOption:@YES,
                                                            }
                                                       error:&error])

Если есть другая причина для очистки вашей модели, тогда NSUserDefaults путь. Вы можете использовать #define, чтобы установить номер версии, и иметь постоянный сброс хранилища, когда числа отличаются друг от друга, а затем, когда вы знаете, что сделали изменение, которое требует пустого хранилища, вы можете увеличить #define:

#define kNukeTheCache 1000

...

    NSNumber *nukeNumber = [[NSUserDefaults standardUserDefaults] objectForKey:nukemeKey];

    if ((nukeNumber == nil) || (nukeNumber.integerValue < kNukeTheCache)) {
            [self deletePersistentStore:storeURL];
    }
    [[NSUserDefaults standardUserDefaults] setInteger:kNukeTheCache forKey:nukemeKey];
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:totalNuke];
    [[NSUserDefaults standardUserDefaults] synchronize];


- (void)deletePersistentStore:(NSURL *)storeURL
{
    NSError *error = nil;
    [[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error];
    if (error) { // Handle error }
}
11
задан Falko 8 August 2017 в 07:33
поделиться

1 ответ

Поток демона не препятствует выходу приложения. Программа завершается, когда все потоки, не являющиеся демонами (включая основной поток), завершены.

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

Например, если вы пишете приложение с графическим пользовательским интерфейсом, а пользователь закрывает главное окно, программа должна выйти. Но если у вас есть потоки, не являющиеся демонами, их не будет.

Из документации: http://docs.python.org/library/threading.html#threading.Thread.daemon

Его начальное значение наследуется от создающий поток; основной поток не является потоком демона и поэтому все потоки, созданные в основном потоке по умолчанию daemon = False.

Вся программа Python завершается, когда не осталось живых потоков, не являющихся демонами.

23
ответ дан 3 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: