感谢您查看我的问题。我正在使用同时使用Core Data
和CloudKit
的应用,当用户创建对象时,我将各种字符串,浮点数和图像资源保存到Core Data
中以便快速进行本地存储,而且CloudKit
作为备份选项。为了防止数据本地损坏,或者用户切换设备,我希望他们始终能够访问我的应用程序使用的数据。无论如何,当我将应用程序编程为直接从CloudKit
加载,绕过Core Data
存储时,我注意到它最终使用的内存几乎是本地存储时的两倍,而且没有任何内容这需要从云更新。我总是注意到当我执行像CloudKit
或CKFetchRecordsOperation
这样的CKQuery
进程时发生的内存使用量激增,但我想通常一旦进程完成内存会解除分配,但事实并非如此。基本上它是存储的完全相同的数据,无论它是从CloudKit
还是Core Data
拉出来的,所以我不明白为什么一个人分配的内存比另一个多得多。是否有可能我做错了什么,并坚持使用强引用,或者这是否是使用CloudKit
时普遍接受的劣势?
更简单的示例是:用户启动应用,并且没有通过Core Data
在本地找到的任何数据触发CloudKit
请求存储在云中的数据。一旦检索并正确处理了所有数据,我的应用程序会自动将检索到的数据保存到Core Data
并继续运行。从云中获取所有数据后,该应用程序现在平均运行70MB内存。如果我然后关闭应用并重新启动它,它会发现存储在Core Data
中的数据然后不需要CloudKit
提取,因此它可以正常进行。当它像这样工作,并且还没有执行任何CK操作时,它平均运行38MB内存。
有没有人知道为什么会发生这种情况?我分享了我的代码,但我甚至不知道从哪里开始。