CloudKit против основных данных и выделения памяти

#swift #core-data #memory-management #cloudkit

#swift #основные данные #управление памятью #cloudkit

Вопрос:

спасибо, что ответили на мой вопрос. Я работаю над приложением, которое использует оба Core Data , и CloudKit , когда пользователь создает объект, я сохраняю различные строки, элементы с плавающей запятой и ресурсы изображений в обоих Core Data для быстрого локального хранения, а также в CloudKit качестве опции резервного копирования. На всякий случай, если данные локально повреждены или пользователь переключает устройства, я хочу, чтобы они всегда могли получить доступ к данным, используемым моим приложением. В любом случае, я заметил, когда я программирую приложение для загрузки напрямую CloudKit , минуя Core Data хранилище, что в итоге оно использует почти в два раза больше памяти, чем при наличии локального хранилища, и ничего, что требует обновления из облака. Я всегда замечаю всплески использования памяти, которые возникают, когда я выполняю CloudKit процесс, подобный a CKFetchRecordsOperation или a CKQuery , но я бы предположил, что обычно после завершения процесса память освобождается, а это не так. По сути, хранятся одни и те же данные независимо от того, извлекаются ли они из CloudKit or Core Data , поэтому я не понимаю, почему один выделяет намного больше памяти, чем другой. Возможно ли, что я делаю что-то не так и придерживаюсь сильных ссылок, или это общепринятый недостаток в использовании CloudKit ?

Более простым примером может быть следующий: пользователь запускает приложение, и нет никаких данных, найденных локально, с помощью Core Data которых триггеры CloudKit запрашивают данные, хранящиеся в облаке. Как только все данные будут извлечены и обработаны должным образом, мое приложение автоматически сохранит полученные данные Core Data и продолжит работу. После извлечения всех данных из облака приложение теперь работает в среднем с объемом памяти 70 МБ. Если я затем закрою приложение и перезапущу его, оно обнаружит, что данные хранятся в Core Data , а затем не будет требовать CloudKit выборки, поэтому оно может работать в обычном режиме. Когда он работает таким образом и не выполнял никаких операций CK, он работает в среднем с объемом памяти 38 МБ.

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

Комментарии:

1. Как правило, подобный вопрос слишком широк для SO, но я понимаю, что вы ищете помощь в том, с чего начать устранение неполадок. Будет очень сложно сузить область поиска с помощью кода, работающего внутри более крупного приложения (слишком много факторов, переменных). Вы можете попробовать воссоздать с нуля очень простое приложение, которое работает с очень простыми данными и ведет себя так же, как ваше реальное приложение. Может быть, вы обнаружите, что это что-то другое, или докажете, что это CloudKit?

2. @brandonscript ~ Спасибо за ответ! Я понял, что мой вопрос был настолько расплывчатым и, вероятно, будет отклонен, поэтому я благодарю вас хотя бы за то, что вы предоставили предложения. И вы совершенно правы, что практически невозможно отследить тестирование внутри моего большого приложения. Я попробую то, что вы предложили.