CFPreferences создает несколько файлов - PullRequest
4 голосов
/ 18 марта 2010

У меня есть только маленький вопрос:

Почему CFPreferences-API создает несколько файлов в моем UserPrefs-Directory? Все файлы имеют мой Bundle-Identifier в качестве имени, и все (кроме одного, оригинала) добавили суффикс, подобный этому:

  • com.myComp.myApp.plist <- (должен быть создан только этот plist-файл) </li>
  • com.myComp.myApp.plist.0qzcicc
  • com.myComp.myApp.plist.8dhjfht

Ответы [ 2 ]

3 голосов
/ 18 марта 2010

Это очень похоже на побочный эффект атомарного письма.

Атомная запись означает, что всякий раз, когда файл должен записываться из NSData (или другого) объекта, файл сначала создается с использованием временного имени файла в том же каталоге. Затем все данные записываются в этот файл (операция, которая обычно не является атомарной). После закрытия файла он переименовывается в исходное имя файла. Переименование является атомарным шагом, который гарантирует, что любой другой процесс, который может посмотреть на файл, увидит либо полностью старый файл, либо полностью новый файл. Нет способа, чтобы процесс мог видеть только половину файла.

Смешные именованные файлы выглядят как артефакты этого процесса. Может быть, ваше приложение упало во время атомарной записи?

1 голос
/ 16 марта 2015

Если вы выполняете синхронизацию при закрытии приложения, например:

- (void)applicationWillResignActive:(UIApplication *)application
{
    [[NSUserDefaults standardUserDefaults] synchronize];
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}

Сначала он попытается записать файл-пустышку, а затем выполнить атомарное переименование.Если запись занимает много времени, вы получите фиктивный файл.

В моем случае у меня было несколько пользователей с 14-мегабайтными списками, и в итоге было много фиктивных файлов (занимающих почти 2 ГБ).

Моя проблема и исправление заключались в том, чтобы сжать образ, который я написал пользователю по умолчанию.

...