Swift CloudKit与核心数据和内存分配

Swift CloudKit与核心数据和内存分配,swift,core-data,memory-management,cloudkit,Swift,Core Data,Memory Management,Cloudkit,谢谢你检查我的问题。我正在开发一个既使用核心数据又使用CloudKit的应用程序,当用户创建一个对象时,我将各种字符串、浮动和图像资产保存到核心数据中,以便快速本地存储,还可以将CloudKit作为备份选项。为了防止本地数据损坏,或者用户切换设备,我希望他们始终能够访问我的应用程序使用的数据。无论如何,我注意到,当我编程直接从CloudKit加载应用程序时,绕过核心数据存储,它最终使用的内存几乎是有本地存储时的两倍,并且不需要从云上更新。我总是注意到当我执行CloudKit进程(如ckfetch

谢谢你检查我的问题。我正在开发一个既使用
核心数据
又使用
CloudKit
的应用程序,当用户创建一个对象时,我将各种字符串、浮动和图像资产保存到
核心数据
中,以便快速本地存储,还可以将
CloudKit
作为备份选项。为了防止本地数据损坏,或者用户切换设备,我希望他们始终能够访问我的应用程序使用的数据。无论如何,我注意到,当我编程直接从
CloudKit
加载应用程序时,绕过
核心数据
存储,它最终使用的内存几乎是有本地存储时的两倍,并且不需要从云上更新。我总是注意到当我执行
CloudKit
进程(如
ckfetchrecordsooperation
CKQuery
)时会出现内存使用高峰,但我可以想象,通常一旦进程完成,内存就会释放,而事实并非如此。从本质上讲,无论是从
CloudKit
还是
Core data
,存储的数据都是完全相同的,所以我不明白为什么一个要分配比另一个多得多的内存。是否可能是我做错了什么,并且坚持使用强引用,或者这是使用
CloudKit
的普遍公认的缺点

一个更简单的例子是:用户启动应用程序,但通过
核心数据
在本地找不到任何数据,从而触发
CloudKit
请求存储在云中的数据。一旦所有数据都被正确检索和处理,我的应用程序就会自动将检索到的数据保存到
核心数据中
,并继续运行。从云端获取所有数据后,该应用程序现在的平均内存为70MB。如果我随后关闭应用程序并重新启动,它将发现存储在
核心数据中的数据
,然后不需要
CloudKit
获取,因此它可以正常运行。当它像这样工作,并且没有执行任何CK操作时,它的平均内存为38MB


有人知道为什么会发生这种情况吗?我想分享我的代码,但我甚至不知道从哪里开始。一般来说,像这样的问题太宽泛了,我无法回答,但我意识到您正在寻求从哪里开始故障排除的帮助。通过在更大的应用程序中运行代码(太多的因素、变量)来缩小范围将是一个非常具有挑战性的任务。您可以尝试从头开始重新创建一个非常基本的应用程序,该应用程序处理与您的真实应用程序相同的非常简单的数据。也许你会发现它是别的东西,或者证明它是CloudKit?@brandonscript~谢谢你的回复!我意识到我的问题很模糊,可能会被拒绝,所以我感谢你至少提供了一些建议。你说得很对,在我的大型应用程序中跟踪测试几乎是不可能的。我会试试你的建议。一般来说,像这样的问题对SO来说太宽泛了,但我知道你正在寻求帮助,从哪里开始故障排除。通过在更大的应用程序中运行代码(太多的因素、变量)来缩小范围将是一个非常具有挑战性的任务。您可以尝试从头开始重新创建一个非常基本的应用程序,该应用程序处理与您的真实应用程序相同的非常简单的数据。也许你会发现它是别的东西,或者证明它是CloudKit?@brandonscript~谢谢你的回复!我意识到我的问题很模糊,可能会被拒绝,所以我感谢你至少提供了一些建议。你说得很对,在我的大型应用程序中跟踪测试几乎是不可能的。我试试你的建议。